其实在我的日常生活中是基本没用过注解的。但是听别的同学讲他们公司用到的蛮多的,想学习一下。发现注解真的好牛掰哦。。可以完全抛弃 xml 的配置。。。希望我们公司也可以用注解来开发。。
其实在我的日常生活中是基本没用过注解的。但是听别的同学讲他们公司用到的蛮多的,想学习一下。发现注解真的好牛掰哦。。可以完全抛弃 xml 的配置。。。希望我们公司也可以用注解来开发。。
注解:
@Component:代表正是个组件
@Autowired:指定类型的 bean 注入到这个字段中
@Configuration:表示它是一个配置类
@ComponentScan:搜索整个包,把所有标记为 Component 的 Bean 自动创建出来,并根据 Autowired 装配
只需要:
每个 Bean 被标注为 @Component 并正确使用 @Autowired 注入;
配置类被标注为 @Configuration 和 @ComponentScan;
所有 Bean 均在指定包以及子包内。
@Scope (ConfigurableBeanFactory.SCOPE_PROTOTYPE) :创建一个原型 Bean
@Order :指定 List 中 Bean 的顺序 分别给 Bean 标记 Order (1),Order (2)….
@Autowired (required = false): 找不到对应的 bean 就略过
@Bean (“Second”) :创建同类型的 Bean Bean 的别名
@Primary:或者指定优先级
@Autowired(required = false)
@Qualifier (“z”) // 指定注入名称为”z” 的 ZoneId
@Value (“classpath:/logo.txt”) 注入 Resourse
@PropertySource (“app.properties”) 注入配置文件
@Value(“${app.zone}”) 注入配置文件的值
String zoneId;
“${app.zone}” 表示读取 key 为 app.zone 的 value,如果 key 不存在,启动将报错;
“${app.zone}” 表示读取 key 为 app.zone 的 value,但如果 key 不存在,就使用默认值 Z。
注入 JavaBean 持有所有的配置
@Component
public class SmtpConfig {
@Value(“${smtp.host}”)
private String host;
@Value("${smtp.port:25}")
private int port;
public String getHost() {
return host;
}
public int getPort() {
return port;
}
}
读取配置 JavaBean 中的配置信息
@Component
public class MailService {
@Value(“#{smtpConfig.host}”)
private String smtpHost;
@Value("#{smtpConfig.port}")
private int smtpPort;
}
@Profile:表示不同的环境 native test production
@Conditional (OnSmtpEnvCondition.class):条件注入
@ConditionalOnProperty (name=”app.smtp”, havingValue=”true”) 如果配置文件中存在 app.smtp=true,则创建
@ConditionalOnClass (name = “javax.mail.Transport”) 如果当前 classpath 中存在类 javax.mail.Transport,则创建