一、bean初始化、销毁
-
1) 指定初始化和销毁方法
通过@bean指定 init-method 和 destory-method
-
2) 通过让bean实现InitialzingBean (定义初始化逻辑)
DisposableBean (定义销毁逻辑)
-
3) 使用JSR250 ,JDK的注解
@PostConstruct :在bean创建完成并属性赋值完成,来指定初始化操作
@PreDestory : 在容器销毁bean之前通知我们进行清理操作 -
4) beanPostProcessor : bean的后置处理器
在bean初始化之前、之后进行操作【需要实现接口】
-
spring底层对beanPostProcessor的使用:
bean赋值、注入其他组件、@Autowired注解、生命周期注解功能、@Async异步
二、属性赋值 @Value
- 1、赋值使用 @Value("${name}")
用 @PropertySource( value = {“classpath:/person.properties”} ) 读取配置文件 - 2、配置文件属性值一旦加载到环境中,可以通过环境直接获取
案例: ConfigurableEnvironment environment = application.getEnvironment();
String name = environment.getProperty(“name”);
三、自动装配
1、 @Autowired自动注入:
1) 默认优先按照类型去容器中找对应组件
2) 如果多个相同类型的bean,再将属性名字作为组件ID去容器中找
3) 使用@Qualifier 指定需要装配的组件的ID
4) 自动装配默认一定要将属性赋值好,没有就会报错
可以使用 @Autowired(required = false)
5) @Primary:让spring在自动装配的时候默认使用 首选的bean
2、@Autowired:构造器、参数、方法、属性 , 都是从容器中获取参数的值
1)【标注在方法位置】:@bean + 方法参数;参数从容器中获取
2)【标注在构造器删】:如果组件只有一个有参构造,这个有参构造的@Autowired可以省略,
3)【放在参数位置】
3、自定义组件想要使用Spring容器底层的一些组件(ApplicationContext、BeanFactory、xxx)
自定义组件实现 xxxAware; 在创建对象的时候,会调用接口规定的方法注入相关组件
Aware把spring底层的一些组件注入到自定义的bean中
xxxAware:功能使用xxxProcessor来处理的 , 后置处理器
四、环境切换
@Profile:指定组件在哪个环境的情况下才能被注册到 spring容器中,不指定,任何环境下都能注册这个bean
- 1、加了环境标识的bean,只能这个环境被激活时才能注册到容器中。默认是 default环境
- 2、写在配置类上,只有是指定环境的时候,整个配置类的所有配置才能生效。
五、AOP:【底层 动态代理】
指在程序运行期间动态的将某段代码,切入到指定方法指定位置进行运行的编程方式。
-
1、导入aop模块,Spring AOP (sprng-aspects)
-
2、定义一个业务逻辑类,在业务逻辑类运行时进行日志打印,(方法运行前、后…)
-
3、定义一个日志切面类
通知方法:
前置通知 (@Before) : 在目标方法运行之前运行
后置通知 (@After) : 在目标方法运行结束之后运行
返回通知 (@AfterReturning): 在目标方法正常返回之后运行
异常通知 (@AfterThrowing) : 在目标方法出现异常运行
环绕通知 (@Around) : 动态代理,手动推进目标方法执行(joinPoint.procced) -
4、给切面类的目标方法标注,何时何地运行(通知注解)
-
5、将切面类和业务逻辑类(目标方法类)都加入到容器中
-
6、必须告诉spring哪个类是切面类(类上加:@Aspect)
-
7、给配置类中加 @EnableAspectJAutoProxy 【开启基于注解的aop模式】