注解
Spring注解
@Component、@Controller、@Service、@Repository
注解 @Configuration
@Configuration(proxyBeanMethods = true)
/*
声明这是一个配置类(配置文件)
配置类中用 @Bean 为容器注册组件,同时容器也是组件
proxyBeanMethods=true: 会保存代理对象,再次调用优先取代理兑现,保持组件单实例
*/
public class MyConfig {
@Bean //方法名作为组件ID,返回类型为组件类型,返回的值即实例值
public User user01(){
User user = new User("user",22);
user.setPet(pet01());
//表示User和Pet之间有依赖关系
return user;
}
@Bean("ReNameCat") //设置值优先,若不设置方法名即为组件ID
public Pet pet01(){
return new Pet("cat");
}
}
注解@Import
@Import({User.class, FilterType.class})
//自动为引入的容器创建实例
注解@Conditional
条件装配 。 @COnditionalOnBean 和 @ConditionalOnMissingBean 为例
public class MyConfig {
@Bean //方法名作为组件ID,返回类型为组件类型,返回的值即实例值
@ConditionalOnBean(name = "ReNameCat")
//User和Pet有依赖关系,没有Pet,不装配User
//条件装配注解也可以直接声明在容器上
public User user01(){
User user = new User("user",22);
user.setPet(pet01());//表示User和Pet之间有依赖关系
return user;
}
@Bean("ReNameCat") //设置值优先,若不设置方法名即为组件ID
public Pet pet01(){
return new Pet("cat");
}
}
@ConditionalOnMissingBean(name = "cat")
//没有XXX,才装配
public class MyConfig {
@Bean //方法名作为组件ID,返回类型为组件类型,返回的值即实例值
public User user01(){
User user = new User("user",22);
user.setPet(pet01());//表示User和Pet之间有依赖关系
return user;
}
@Bean("ReNameCat") //设置值优先,若不设置方法名即为组件ID
public Pet pet01(){
return new Pet("cat");
}
}
注解@ImportResource
@ImportResource("classpath:beans.xml")
//导入第三方包、XMl文件......
public class MyConfig {
@Bean //方法名作为组件ID,返回类型为组件类型,返回的值即实例值
public User user01(){
User user = new User("user",22);
user.setPet(pet01());//表示User和Pet之间有依赖关系
return user;
}
@Bean("ReNameCat") //设置值优先,若不设置方法名即为组件ID
public Pet pet01(){
return new Pet("cat");
}
}
注解@ConfigurationProperties
1、@Component+@ConfigurationProperties
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "mycar")
/*
mycar.brand=BYD
mycar.price=10
*/
public class Car {
private String brand;
private Integer price;
}
@Controller
//@RequestMapping("/hello")
public class HelloController {
@Autowired
Car car;
@ResponseBody
@RequestMapping("/car")
public Car car(){
return car;
}
}
2、@EnableConfigurationProperties+@ConfigurationProperties
@EnableConfigurationProperties(Car.class)
//开启自动属性配置,配置Car并自动注入到容器中(适用于第三方包,无Component注解)
//同1,去掉Component注解
public class MyConfig