Spring 体系常用注解
注解简介
class加载注解
-
**@Component("[该类唯一标识]") **
//这个注解相当于`@Component("demo") // 唯一变量名为Demo public Demo{ ........ } ------------------------------- @Component //如果不加("[名称]"), 则加载的对象唯一变量名默认为 类名首字母小写 demo2 public Demo2{ ........ }
-
@Service(“user”) //与@component 注解作用相同 ,一般写于Service层类上
-
@Controller(“user”) //与@component 注解作用相同 ,一般写于web层类上
-
**@Repository(“user”) ** //与@component 注解作用相同 ,一般写于dao层类上
class属性注入注解
-
@Autowried
注入对象需要两步判断1. spring 是否有被注入类型对象 1.1 **仅有一个时** 直接注入那个唯一对象 1.2 **有多个时** 1.2.1 **判断注入对象的变量名 ** 如果有与之相同的则选取与变量名相同的注入 没有则报错 1. 3 没有时 报错
Interface Test { void haha(); } @Controller public ImplTest1 implements Test{ public void haha(){ .... } } @Controller public ImplTest2 implements Test{ public void haha(){ .... } } @Controller public work { //此时有多个Test 实例对象 // 会注入ImplTest2 @Autowried private Test implTest2; // 会注入ImplTest1 @Autowried private Test implTest1; // 报错,spring 不知道该注入ImplTest1 或是ImplTest2 @Autowried private Test test; }
-
@Autowired+@Qualifire()
-
//此注解是为了解决Autowired 在有多个可注入对象需要根据变量名来判断注入的改进
- 通过@Qualifire("[指定的对象名称]") 来指定注入那个对象
- @Qualifire不可单独使用
@Controller public work { //此时有多个Test 实例对象 // 会注入ImplTest2 @Autowried private Test implTest2; // 会注入ImplTest1 @Autowried private Test implTest1; // 报错,spring 不知道该注入ImplTest1 或是ImplTest2 @Autowried private Test test; // 会注入ImplTest1 @Autowried @Qualifire("implTest1") private Test test; }
-
-
@Resource(name="[指定的对象名称]")
//此注解 可单独使用 ,通过name 属性直接选定注入那个@Controller public work { //此时spring 中有多个Test 实例对象 ------------------------------------- // 注入ImplTest2 @Autowried private Test implTest2; // 注入ImplTest1 @Autowried private Test implTest1; // 报错,spring 不知道该注入ImplTest1 或是ImplTest2 @Autowried private Test test; // 注入ImplTest1 @Autowried @Qualifire("implTest1") private Test test; // 注入ImplTest1 @Resource(name="implTest1") private Test test; }
配置类注解
- @ComponentScan(“包名”)
- 包扫描
//默认用法 @ComponentScan("com.xxx.xxx") //指定扫描某个类 @ComponentScan(value="com.xxx.xxx", useDefaultFilters=true, includeFilters={ @Filter(type=FilterType.ANNOTATION,classes={Controller.class}), @Filter(type=FilterType.ASSIGNABLE_TYPE,classes={ziDingYiClass.class}) }) //排除某个class 与标有controller注解的类 @ComponentScan(value="com.xxx.xxx", //关闭默认规则(默认扫描 @Controller,@Service ,Repository,@Component) useDefaultFilters=false, excludeFilters={ @Filter(type=FilterType.ANNOTATION,classes={Controller.class}), @Filter(type=FilterType.ASSIGNABLE_TYPE,classes={ziDingYiClass.class}) }) //自定义规则 //定义对象 实现 TypeFilter 重写 match方法 public class MyScanFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) { // 可以通过MetadataReader获得各种信息 //自定义条件 }
}
```
-
@Configuration (代替beans 标签)
1. 配置对象@Configuration public class Test{ }
-
@Bean 与 @Configuration 一起使用
- 加载对象
- 对象名称默认为方法名
@Configuration public class Test{ @Bean public MyTest myTest(){ return new MyTest(); } } ------------------- @Bean(name ="mT") // 会从容器中找对象 public MyTest myTest(ArgTest argTest){ return new MyTest(); } }
-
@Import(“Class[] 类型”)
1. 导入其他配置类@Import({otherTest.class}) @Configuration public class MyTest { }
}
```
-
@PropertySource(value = {“具体/路径/”}) or @PropertySource(value = “classpath: 具体.路径.”)
- 加载外部文件
@PropertySource(value = "classpath = com.xxx.pro.proptertis",encoding ="UTF-8") @Configuration public class MyTest { @Value("[文件中对应值]") private String name; }
SpringBoot 部分相关注解
-
@ConfigurationProperties(prefix = “[自定义前缀]”)
0. 使用前续开启EnableConfigurationProperties("[标有ConfigurationProperties注解的类.class]")- 加载外部文件
@PropertySource(value = "classpath = com.xxx.pro.proptertis",encoding ="UTF-8") @ConfigurationProperties(prefix = "myTest") @Configuration public class MyTest { private String name; }
-
@ImportResource(locations = “[引入文件路径]”)
- 加载外部文件
@ImportResource(locations = "classpath:applicationContext.xml")
-
@Scope
- 生存周期