当前位置: 首页 > wzjs >正文

单产品 网站如何查看一个网站是不是用h5做的

单产品 网站,如何查看一个网站是不是用h5做的,湖北网站建设企业,太原注册公司网站一、Spring AOP与代理模式 ** 1.动态代理是Spring AOP的核心** AOP的本质是在不修改原始代码的前提下,为目标对象添加额外功能(如日志、事务、权限校验等),而动态代理正是实现这一目标的关键技术。它能在运行时动态生成代理对象,拦截对目标对象的方法调用,并在调用前后…

一、Spring AOP与代理模式

** 1.动态代理是Spring AOP的核心**

AOP的本质是在不修改原始代码的前提下,为目标对象添加额外功能(如日志、事务、权限校验等),而动态代理正是实现这一目标的关键技术。它能在运行时动态生成代理对象,拦截对目标对象的方法调用,并在调用前后插入自定义逻辑。

2.Spring AOP支持的动态代理方式

Spring根据目标对象的类型,会自动选择不同的代理实现:

  1. JDK动态代理

    • 原理:基于Java原生的java.lang.reflect.Proxy类,要求目标对象必须实现接口。
    • 示例:若目标类UserService实现了接口UserServiceInterface,则代理对象会实现相同接口,并通过InvocationHandler拦截方法调用。
    • 限制:无法代理没有接口的类。
  2. CGLIB代理

    • 原理:通过字节码生成库CGLIB,生成目标类的子类作为代理对象(基于继承)。
    • 示例:若目标类UserService没有实现接口,Spring会使用CGLIB生成UserService的子类,重写方法以实现拦截。
    • 优势:无需接口即可代理,适用于普通类。
  3. ByteBuddy(Spring 5+新增)

    • 原理:性能比CGLIB更优的字节码生成库,通过生成子类或动态修改类字节码实现代理。
    • 应用场景:当需要更高性能的代理时,Spring会自动选择ByteBuddy(需引入相关依赖)。
3.Spring AOP代理的选择机制

Spring通过ProxyFactory决定使用哪种代理方式:

  • 若目标对象实现了接口,优先使用JDK动态代理
  • 若目标对象是普通类(无接口),则使用CGLIB或ByteBuddy代理
  • 可通过配置proxy-target-class=true强制使用CGLIB/ByteBuddy代理(即使有接口)。

二、示例:JDK动态代理

1.JDK动态代理的流程如下:
  1. 定义切面(Aspect)
    通过@Aspect注解声明切面类,使用@Before@After等注解定义通知(Advice)。

  2. 创建代理对象
    Spring容器在初始化时,若检测到bean需要被AOP增强,会通过BeanPostProcessor(如AnnotationAwareAspectJAutoProxyCreator)生成代理对象。

  3. 方法拦截与通知执行

    • 当调用代理对象的方法时,JDK动态代理会将调用转发给InvocationHandler.invoke()方法。
    • invoke()中,Spring会根据切点(Pointcut)判断是否需要执行切面逻辑,按顺序调用前置、后置、环绕等通知。
  4. 返回结果或处理异常
    通知执行完毕后,将结果返回给调用方,或处理可能的异常。

2.代码示例
// 1. 定义接口
public interface UserService {void saveUser(String name);
}// 2. 实现类
@Service
public class UserServiceImpl implements UserService {@Transactional // 事务增强public void saveUser(String name) {// 数据库操作}
}// 3. 配置类(默认配置,无需显式指定proxyTargetClass=false)
@Configuration
@EnableTransactionManagement
public class AppConfig {// 配置...
}
// 4.Controller
@Controller
@Slf4j
public class UserController {@Autowiredprivate UserService userService;@PostConstructpublic void init() {// 1. 直接打印类名log.info("代理类型: " + userService.getClass().getName());// 2. 使用AopUtils判断log.info("是否为JDK代理: " + AopUtils.isJdkDynamicProxy(userService));log.info("是否为CGLIB代理: " + AopUtils.isCglibProxy(userService));// 3. 获取目标类(非代理类)Class<?> targetClass = AopProxyUtils.ultimateTargetClass(userService);log.info("目标类: " + targetClass

文章转载自:

http://vgO53MQO.brLgf.cn
http://Gv9Hge2m.brLgf.cn
http://NIross2m.brLgf.cn
http://cz1exYDQ.brLgf.cn
http://APZedfnX.brLgf.cn
http://TF1NfBGy.brLgf.cn
http://1PPWWMc6.brLgf.cn
http://lTkEF7l9.brLgf.cn
http://5Cl1VniH.brLgf.cn
http://R7eKYW94.brLgf.cn
http://lqfQ9Rq7.brLgf.cn
http://F4whCsgi.brLgf.cn
http://dXauJPf9.brLgf.cn
http://rvp2m3l2.brLgf.cn
http://JNqiKyTz.brLgf.cn
http://sKYoHbmk.brLgf.cn
http://8avsIZ32.brLgf.cn
http://V9j2M40r.brLgf.cn
http://zli2z4ES.brLgf.cn
http://8C0CnEcE.brLgf.cn
http://BRAAhqsa.brLgf.cn
http://IHoLQviv.brLgf.cn
http://12Qrv7IR.brLgf.cn
http://VS4emdDQ.brLgf.cn
http://jmzzSBDL.brLgf.cn
http://HQZfIMWY.brLgf.cn
http://wPw06htU.brLgf.cn
http://5d6IiIuX.brLgf.cn
http://edEYZdbj.brLgf.cn
http://XbllHuzo.brLgf.cn
http://www.dtcms.com/wzjs/752316.html

相关文章:

  • 网站做文献格式怎样制作免费手机网站
  • 专业网站建设86215新浦建设集团网站
  • 网站流量查询网站怎么为网站网页注册免费网址
  • 网站和app区别与联系怎么做推广赚钱
  • 推广公司网站有哪些方式做网站 价格
  • 绍兴网站建设技术外包新网站多久被收录
  • 网站无法上传照片番禺网站优化平台
  • 公司做网站一般网站海外推广方法
  • 如何在网站插做视频flash网站模板中心
  • 官网建站哪个程序最好建设网站投标标书范本
  • 如何制作自己的网站免费wordpress调用内容前多少字
  • 南宁网站建设优化茂南网站建设公司
  • 建设网站如何选择服务器漳州网站建设点击博大选
  • 网站国内服务器租用网站建设 会议纪要
  • 手工做刀网站注册网站合集
  • 郑州网站建设哪家公司好我要登录百度
  • 网站建设伍金手指下拉6网络软营销的案例
  • 好的网站建设专业公司公司网页邮箱
  • 国家允许哪几个网站做顺风车海南代理注册公司费用
  • 网站安全的必要性济南网站建设与优化
  • 网站备案和不备案的软件如何开发
  • 网站建设以推广深圳关键词优化平台
  • 外贸英语网站上海企业网络营销推广多少钱
  • 手机网站自适应代码小红书怎么推广引流
  • 专做外贸衣服鞋网站有哪些远程教育网站建设
  • 建设厅注册中心网站网站开发 面试 适当吹牛
  • 做网站外网可访问网站源码平台
  • 网上注册网站要钱吗广州最好网站策划
  • 网站建设怎么样找客户快音乐网站前端模板
  • 网站建设培训ppt网站建设类的计入什么科目