spring注解学习

邮差的信 提交于 2020-03-02 16:39:11

初始化容器时(为了循环依赖 懒加载)和之后获取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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!