(一) @Component
1.作用
把普通pojo实例化到spring容器中
@Component
public class Dog {
public void bark(){
System.out.println("wang wang!");
}
}
在这里写了一个Dog类,并且通过@Component把它装配到了Spring容器,
相当于<bean id="dog" class="com.lin.pojo.Dog"/>,class是Dog的类路径
2.类似注解
可以说@Repository、@Service、@Controller是@Component在不同层上的别名
@Controller:对应Controller层,点进去可以发现是一个Component
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
@Service: 对应Service层
@Repository:对应DAO层
(二) @Autowired
1.作用
它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。autowired有4种模式,byName、byType、constructor、autodectect.一般情况下@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。
2.常规使用
@Component
public class People {
@Autowired
private Dog dog;
private String name;
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "People{" +
", dog=" + dog +
", name='" + name + '\'' +
'}';
}
}
规则如下:
1.Spring先去容器中寻找Dog类型的bean(先不扫描dog字段)
2.若找不到一个bean,会抛出异常
3.若找到一个Dog类型的bean,自动匹配,并把bean装配到dog中
4.若Dog类型的bean有多个,则扫描后面dog字段进行名字匹配,匹配成功后将bean装配到dog中
3.非常规使用
@Autowired
@Qualifier("dogHashiqi")
private Dog sillyDog;
若有多个Dog类型的Bean,就可以把其中id="dogHashiqi"的bean装配给sillyDog.
(三) @Bean
1.作用
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。
@Bean 注解告诉 Spring,一个带有 @Bean 的注解方法将返回一个对象,该对象应该被注册为在 Spring 应用程序上下文中的 bean
把对象RestTemplate注册到bean中
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
从bean中取出实例化的restTemplate
@Autowired
private RestTemplate restTemplate;
2.位于Configuration和Component下的区别
@Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。
@Component下的@Bean多次调用同个方法返回的是不同的对象实例
详情参考:https://blog.csdn.net/ctwy291314/article/details/104428533
5万+




被折叠的 条评论
为什么被折叠?



