Spring知识(二)

Spring知识(二)

1. @Resource

1.2 @Resource是什么?

@Resource注解与@Autowired类似,也是用来进行依赖注入的;

@Resource是java层面所提供的注解;

@Autowired是Spring层面所提供的注解;

它们依赖注入的底层实现逻辑也不同

1.3 @Resource中的name属性

@Resource注解中有一个name属性,针对name属性是否有值,@Resource的依赖注入底层流程是不同的。

@Resource如果name属性有值,那么Spring会直接根据所指定的name值取Spring容器中找Bean对象,如果找到了则成功,如果没有找到,则报错。

如果@Resource中的name属性没有值,则:
  • 1、先判断属性名字在Spring容器中是否存在Bean对象;
  • 2、如果存在,则成功找到Bean对象进行注入;
  • 3、如果不存在,则根据属性类型取Spring容器找Bean对象,找到一个则进行注入。

2. @Value

2.1 @Value是什么?

@Value注解和@Resource、@Autowired类似,也是用来对属性进行依赖注入的,只不过@Value是用来从Properties文件中来取值的,并且@Value可以解析SpEL(Spring表达式)。

2.2 @Value的使用

@Value(“myzi”)

直接将字符串"muzi"赋值给属性,如果属性类型不是String,或无法进行类型转化,则报错。

@Value("${muzi}")

将会把 中 的 字 符 串 当 作 k e y , 从 P r o p e r t i e s 文 件 中 找 出 对 应 的 v a l u e 赋 值 给 属 性 , 如 果 没 找 到 , 则 会 把 " {}中的字符串当作key,从Properties文件中找出对应的value赋值给属性,如果没找到,则会把" keyPropertiesvalue"{muzi}"当作普通字符串注入给属性。

@Value("#{muzi}")

会将#{}中的字符串当作Spring表达式进行解析,Spring会把"muzi"当作beanName,并从Spring容器中找对应bean,如果找到则进行属性注入,没找到则报错。

3. FactoryBean

3.1 FactoryBean是什么?

FactoryBean是Spring所提供的一种较灵活的创建Bean的方式,可以通过实现FactoryBean接口中的getObject()方法来返回一个对象,这个对象就是最终的Bean对象。

3.2 FactoryBean接口中的方法

  • Object getObject():返回的是Bean对象;
  • boolean isSingleton():返回的是否是单例Bean对象;
  • Class getObjectType():返回的是Bean对象的类型。

3.3 FactoryBean的特殊点

@Component("muzi")
public class MuziFactoryBean implements FactoryBean {
    @Override
    //Bean对象
    publci Object getObject() throws Exception {
        return new User();
    }
    
    @Override
    //Bean对象的类型
    public Class<?> getObjectType() {
        return User.class;
    }
    
    @Override
    //所定义的Bean是单例还是原型
    public boolean isSingleton() {
        return true;
    }
}

上述代码,实际上对应了两个Bean对象:

  • 1、beanName为"muzi",bean对象为getObject方法所返回的User对象。
  • 2、beanName为"&muzi",bean对象为MuziFactoryBean类的实例对象。

FactoryBean对象本身也是一个Bean,同时它相当于一个小型工厂,可以生产出额外的Bean。

BeanFactory是一个Spring容器,是一个大型工厂,它可以生产出各种各样的其它Bean。

FactoryBean机制被广泛的应用在Spring内部和Spring与第三方框架或组件的整合过程中。

4. ApplicationContext

4.1 ApplicationContext是什么?

ApplicationContext是比BeanFactory更加强大的Spring容器,它既可以创建bean、获取bean,还支持国际化、事件广播、获取资源等BeanFactory不具备的功能。

4.2 ApplicationContext所继承的接口

  • EnvironmentCapable
  • ListableBeanFactory
  • HierarchicalBeanFactory
  • MessageSource
  • ApplicationEventPublisher
  • ResourcePatternResolver
4.2.1 EnvironmentCapable

ApplicationContext继承了这个接口,表示拥有了获取环境变量的功能,可以通过ApplicationContext获取操作系统环境变量和JVM环境变量。

4.2.2 ListableBeanFactory

ApplicationContext继承了这个接口,就拥有了获取所有beanNames判断某个beanName是否存在beanDefinition对象统计BeanDefinition个数获取某个类型对应的beanNames等功能。

4.2.3 HierarchicalBeanFactory

ApplicationContext继承了这个接口,就拥有了获取父BeanFactory判断某个name是否存在bean对象的功能。

4.2.4 MessageSource

ApplicationContext继承了这个接口,就拥有了国际化功能,比如可以直接利用MessageSource对象获取某个国际化资源(比如不同国家语言对应的字符)。

4.2.5 ApplicationEventPublisher

ApplicationContext继承了这个接口,就拥有了事件发布功能,可以发布事件,这是ApplicationContext相对于BeanFactory比较突出、常用的功能。

4.2.6 ResourcePatternResolver

ApplicationContext继承了这个接口,就拥有了加载并获取资源的功能,这里的资源可以是文件、图片等某个URL资源都可以。

5.BeanPostProcessor

5.1 BeanPostProcessor是什么?

BeanPostProcessor是Spring所提供的一种扩展机制,可以利用该机制对Bean进行定制化加工,在Spring底层源码实现中,也广泛的用到了该机制,BeanPostProcessor通常也叫做Bean后置处理器

BeanPostProcessor在Spring中是一个接口,我们定义一个后置处理器,就是提供一个类实现该接口,在Spring中还存在一些接口继承了BeanPostProcessor,这些子接口是在BeanPostProcessor的基础上增加了一些其它的功能。

5.2 BeanPostProcessor中的方法

postProcessBeforeInitialization():初始化前方法,表示可以利用这个方法来对Bean在初始化前进行自定义加工。

postProcessAfterInitialization():初始化后方法,表示可以利用这个方法来对Bean在初始化后进行自定义加工。

5.3 InstantiationAwareBeanPostProcessor

BeanPostProcessor的一个子接口

postProcessorBeforeInstantiation():实例化前;

postProcessorAfterInstantiation():实例化后;

postProcessProperties():属性注入后。

6.AOP

6.1 AOP是什么?

AOP就是面向切面编程,是一种非常适合在无需修改业务代码的前提下,对某个或某些业务增加统一的功能。比如日志记录、权限控制、事务管理等,能很好的使得代码解耦,提高开发效率。

6.2 AOP中的核心概念

  • Advice:Advice可以理解为通知、建议,在Spring中通过定义Advice来定义代理逻辑;
  • Pointcut:Pingtcut是切点,表示Advice对应的代理逻辑应用在哪个类、哪个方法上;
  • Advisor:Adviser等于Advice+Pointcut,表示代理逻辑和切点的一个整体,程序员可以通过定义或封装一个Advisor,来定义切点和代理逻辑;
  • Weaving:Weaving表示织入,将Advice代理逻辑在源代码级别嵌入到切点得过程,就叫做织入;
  • Target:Target表示目标对象,也就是被代理对象,在AOP生成的代理对象中会有目标对象;
  • Join Point:Join Point表示连接点,在Spring AOP中,就是方法的执行点。

6.3 AOP的工作原理

AOP是发生在Bean的生命周期过程中的:
  • 1、Spring生成bean对象时,先实例化出来一个对象,也就是target对象;
  • 2、再对target对象进行属性填充;
  • 3、在初始化后步骤中,会判断target对象有没有对应的切面;
  • 4、如果有切面,就表示当前target对象需要进行AOP;
  • 5、通过Cglib或JDK动态代理机制生成一个代理对象,作为最终的bean对象;
  • 6、代理对象中有一个target属性指向了target对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值