初始化容器时(为了循环依赖 懒加载)和之后获取bean时都会去单例池(一个map结构 beanName:bean)里面去拿对象
aop实现公共处理减少很多冗余,比如公共的异常日志处理
@scope @lazy
@scope 设置bean的属性
单实例默认是启动时加载(可以使用@lazy注解实现懒加载),而其他是懒加载
spring可以获取运行环境的各种属性
@Conditional
spring可以根据条件得到不同的bean:@Conditional注解的使用
也可以加在类上,即满足条件(加在注解上的条件类的判断方法返回true)这个类中的所有注册bean才会生效
@Repository
@Repository不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型
@import
@import快速给容器中导入一个组件,默认的id就是组件类的全名(组件即类)@import({User.class,Stu.class})
BeanPostProcessor 后置处理器
BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调BeanPostProcessor中定义的两个方法:
其中postProcessBeforeInitialization方法会在每一个bean对象的初始化方法调用之前回调;
postProcessAfterInitialization方法会在每个bean对象的初始化方法调用之后被回调。
运用
@Value
@Value("normal")
private String normal; // 注入普通字符串
@Value("#{systemProperties['os.name']}")
private String systemPropertiesName; // 注入操作系统属性
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber; //注入表达式结果
@Value("#{beanInject.another}")
private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性another,类具体定义见下面
@Value("classpath:com/hry/spring/configinject/config.txt")
private Resource resourceFile; // 注入文件资源
@Value("http://www.baidu.com")
private Resource testUrl; // 注入URL资
//注入spring配置文件里面值
@Value("${app.name}")
private String appName; // 这里的值来自application.properties,spring boot启动时默认加载此文件
@PropertySource
通过@PropertySource注解将properties配置文件中的值存储到Spring的 Environment中,Environment接口提供方法去读取配置文件中的值,参数是properties文件中定义的key值。
使用1:
@Configuration
@PropertySource("classpath:jdbc.properties")
public class PropertiesWithJavaConfig {
@Value(${jdbc.driver})
private String driver;
@Value(${jdbc.url})
private String url;
@Value(${jdbc.username})
private String username;
@Value(${jdbc.password})
private String password;
}
使用2:
@Configuration
@PropertySource("classpath:jdbc.properties")
public class PropertiesWithJavaConfig {
@Autowired
private Environment env;
}
接着就可以用env.getProperty("jdbc.driver")得到相应的属性值
@Qualifier
表明了哪个实现类才是我们所需要的,需要注意的是@Qualifier的参数名称必须为我们之前定义@Service注解的名称(id)之一!
@Service("a") 。。 @Service("b")
注入实例时:
@Autowired
@Qualifier("b")
@Inject
@Primary
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Resource默认按照ByName自动注入
Autowired支持参数required=false,@Resource,@Inject都不支持
@Autowired,和@Inject支持@Primary注解优先注入,@Resource不支持
@Autowired通过@Qualifier指定注入特定bean,@Resource可以通过参数name指定注入bean,@Inject需要@Named注解指定注入bean(两个注解配合)
ApplicationListener<>里边的泛型需要继承ApplicationEvent抽象方法
ContextRefreshedEvent为上下文刷新事件,实现了这个接口,spring容器加载完毕后,就会执行这个实现类的重写的方法.
@Component
public class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {
通过注解定义bean,如果做dao的话一定有@Repositiry这个概念,它相当于是一个数据操作的一个仓库,所以后续关于数据库的一些操作建议都放在@Repository定义的bean中(dao包下的类使用这个注解),业务的服务就是用@service注解
Spring的缓存抽象:在方法上加上缓存注解(@cacheAble),然后程序第一次调用这个方法时候就会把结果缓存起来,下一次调用这个方法就直接去缓存中取出结果, 可以设置过期时间啥的,可以使用很多东西作为他缓存的实现方式,包括redis
来源:https://www.cnblogs.com/shineipangtuo/p/12395827.html