Spring详解(二)

/*

    * bean的生命周期:

    * 1:构造(对象创建)

    *          单实例:在容器启动时创建对象

    *          多实例:在每次获取bean时创建对象

    * 2:初始化:

    *          对象创建完成并赋好值后初始化

    *          指定初始化和销毁的方法:

    *                 2.1:通过@Bean(initMethod="方法名",destroyMethod="方法名"),

    *                 这里的initMethod等同于配置文件xml中的init-Method方法,destroyMethod等同于配置文件xml中的destroy-Method方法

    *                 2.2:通过bean实现接口InitializingBean(定义初始化逻辑):afterPropertiesSet()方法,

    *                 实现接口DisposableBean(定义销毁逻辑):destroy()方法

    *                 2.3:使用JSR250:

    *                 使用方式:标注在方法上

    *                 @PostCorstruct:在bean创建完成并属性赋值后执行初始化方法

    *                 @ProDestroy:在容器销毁bean之前通知我们进行清理工作

    *                 2.4:使用spring提供的接口BeanPostProcessor(后置处理器):

    *                 在bean的初始化前后进行一些处理工作:

    *                 @postProcessBeforeInitialization:在初始化之前处理工作

    *                 @postProcessAfterInitialization:在初始化之后处理工作

    *                 

    * 3:销毁:

    *          单实例:在关闭容器时销毁对象

    *          多实例:不管理对象的销毁

    */

/*

    * 容器的赋值的方式:

    * 使用@Value:等同于配置文件xml中的<property name="name"

value=“赋值的内容”>

    *          1.1:常用的:@Value("赋值的内容")

    *          1.2:使用SPEL表达式:@Value("#{赋值的内容}")

    *          1.3:使用${}取出配置文件的值

    *                 1.3.1:加载xxx.properties配置文件:

    *                 @PropertySource(value="classpath:配置文件的名称"):等同于配置文件xml中的<context:property-placeholder

location=“xxx.properties”/>

    *                 1.3.2:使用${}取出配置文件中的值,如:${properties.name}

    */

/*

    * 自动装配的方式:

    * spring利用依赖注入(DI)来实现对IOC容器中各个组件的依赖关系赋值

    * 1:@Autowired:常用,

    *          1.1:优先按照类型去IOC容器中找到对应的组件并赋值

    *          1.2:如果找到多个相同的类型,再将属性的名称做为id去IOC容器中查找

    *          1.3:配合使用@Qualifier(value="组件ID或名称"),明确的指导通过这个组件ID去IOC容器中查找

    *          1.4:注意:自动装配默认必须将属性赋值好,没有就会报错

    *          1.5:如果不想报错,可以使用@Autowired(required=false):将它变成不必须的,没有时就不报错,返回空

    *          1.6:如果不想使用@Qualifier来明确指定,那么可以使用:

    *          @Primary:让spring进行自动装配时,默认使用首选的bean(优先装配)

    *          注意:当使用@Qualifier明确指定时,@Primary无效

    * 2:@Resource,@Inject;(java规范的注解):

    *   2.1:@Resource:JSR250:

    *          2.1.1:虽然能跟@Autowired一样实现自动装配,但只能通过名称去IOC容器查找,没有能支持@Primary和@Autowired(required=false)的功能

    *   2.2:@Inject:JSR330:要使用这个注解,还需要导入一个jar包依赖:javax.inject.jar

    *          2.2.1:虽然能跟@Autowired一样实现自动装配,但是没有能支持@Autowired(required=false)的功能

    * 

    * 自动装配的实现原理的一部分:

    * AutowiredAnnotationBeanPostProcessor:解析完成自动装配功能

    * 

    * @Autowired:使用的方式:

    * 因为@Autowired的目标是@Target({ElementType.CONSTRUCTOR, ElementType.METHOD,

ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})

    * 所以它能标识在:构造函数(CONSTRUCTOR),普通方法(METHOD),参数(PARAMETER),场(FIELD),类(ANNOTATION_TYPE)

    * 不管标识在哪个地方,都是从容器中获取对象,都是一样的

    *

    * 3:自定义的组件想要使用spring容器底层的一些组件(比如ApplicationContext,BeanFactory,xxx...等等),

    * 那么可以通过实现(ApplicationContextAware,BeanFactoryAware,xxxAware等等)

    */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值