Spring得ioc和aop理解

IOC

控制反转,把创建对象的权力交给框架,是框架的重要特征。它包括依赖注入和依赖查找。
依赖注入的方式:构造方法注入;set方法注入;注解注入(@Resource和@Autowired)
@Resource和@Autowired区别
@Autowire 默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可 以结合@Qualifier注解一起使用。
@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属 性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找 依赖对象。
可能是由于我开发用到的@Autowire比较多,所以我更倾向于@Autowire,第一是:因为平时我们在项目中不会有两个相同类型的类,不用考虑名字的命名问题;第二:@Autowire是spring中的注解,而@Resource是属于J2EE的,spring框架当然使用自己的注解更好些。

IOC过程
ClassPathResource resource = new ClassPathResource("beans.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader =new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(resource);
factory.getBean("beanName");
1.定义好Spring的配置文件;
2.通过Resource对象将spring配置文件进行抽象,抽象成一个Resource对象;
3.定义好Bean工厂(各种BeanFactory);
4.定义好XmlBeanDefinitionReader对象,并且将工厂作为参数传递进去供后续回调使用;
5.通过XmlBeanDefinitionReader对象读取之前抽象出的Resource对象(包含XML文件的解析过程);
6.本质上,xml文件的解析是由xmlBeanDefinitionReader对象交由BeanDefinitionParserDelegate委托来完成,实质上这里面使用到了委托模式。
7.IOC容器创建完毕,用户可以通过容器读取所需要的对象信息。

大白话:
1.Spring的bean实际上是缓存在CurrentHashMap对象中。
2.在创建bean之前,首先需要将该bean的创建标识设定好,表示该bean已经或即将被创建,这样增加缓存的效率。
3.根据bean的scope属性来确定是singleton还是prototype等范围,然后创建相应的对象。
4.通过反射来创建bean的实例,在创建之前首先要检查访问修饰符,如果不是public的,则调用setAccessible(true)来突破限制。使得可以通过私有的构造方法创建对象实例。
5.接下来,寻找bean的属性值,完成属性的注入。
6.将创建出来的singleton对象添加到缓存中,供下次调用使用。

AOP

join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现aop时,并不需要去定义一个join point。(, Joint point 是所有可能被织入 Advice 的候选的点,在 Spring AOP中, 则可以认为所有方法执行点都是 Joint point)
Advice(通知):定义在连接点的行为,围绕方法调用而进行注入方法或者行为。(@before  @after 等等这些方法)
aspect(切面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。
Point cut(切点):确定在哪些连接点处应用通知。(符合要求的一些方法,给这些方法施加advice通知)
Advisor(通知器):组合advice与pointcut。

aop实现方式
JDK动态代理(JdkDynamicAopProxy):如果被代理的这个类有实现接口,则用JDK动态代理的方式实现。(和目标类实现同一个接口的方法增强)
CGLIB(CglibProxyFactory):如果被代理的这个类没有实现接口,则用CGLIB库实现。(生成目标类的一个子类实现方法的增强)

 

转载于:https://my.oschina.net/yaojianpeng/blog/3068664

Spring中的IOC(Inverse of Control,控制反转)是一种设计模式,它将对象的创建和依赖关系的管理交给一个容器来负责。在Spring中,我们通过配置文件或注解来描述对象之间的依赖关系,Spring容器会根据这些描述来创建和管理对象的生命周期。IOC的好处是降低了对象之间的耦合性,使得系统更加灵活和可扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [spring框架两大核心:IOCAOP的详解](https://blog.csdn.net/qq_49755675/article/details/125642564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Spring框架:谈谈对IOCAOP理解](https://blog.csdn.net/weixin_48016395/article/details/123099446)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Spring核心IoCAOP理解](https://download.csdn.net/download/weixin_38555304/12784914)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值