springBoot中注解的使用
一、组件添加
1、@Configuration
作用:告诉springBoot这是一个配置类 可以配置一些自定义的组件 ,相当于配置文件。
属性说明:
proxyBeanMethods:
设置该类中添加的组件是否是实例的 默认是true
属性值:
true:表示返回的组件都是单实例的
false:表示每次调用返回的组件都是新创建的
tips:
组件依赖必须使用单例模式
示例:
class Pet{
private String name;
private Inteage age;
private Pet pet;
public Pet(String name){
this.name=name;
}
}
class Person{
private String name;
private Integer age;
private Pet pet;
public Person(String name,Integer age){
this.name=name;
this.age=age;
}
public void setPet(Pet pet){
this.pet=pet;
}
}
@Configuration(proxyBeanMethods = true) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
@Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
public User user01(){
User zhangsan = new User("zhangsan", 18);
//user组件依赖了Pet组件
zhangsan.setPet(tomcatPet());
return zhangsan;
}
@Bean("tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
2、@Bean、@Component、@Controller、@Service、@Repository
作用:都是用来在spring容器中创建组件的,@Bean标注在方法上,其余都标注在类上
@Bean:标注在方法上,表示向容器中创建一个bean,通常搭配@Configuration来使用
@Component、@Controller、@Service、@Repository: 都是标注在类上,表示这是什么组件
@Component:标注在类上,表示将创建该类示例放入ioc容器中
@Controller:标记controller对象,用在controller层
spring还有一个注解是@RestController 其等同于@Controller+@ResponseBody
@Service:用在service层
@Repository:用在dao层
示例:
@Controller
public class MyController{
@ResponseBody
@getMapping("/hello")
public String hello(){
return "hello world";
}
}
@Repository
public interface UserMapper{
User getByName(String name);
List<User> getAll();
}
public interface UserService{
User getByName(String name);
List<User> getAll();
}
@Service
public class UserServiceImpl{
@Autowired
UserMapper userMapper;
public User getByName(String name){
return userMApper.getByName(name);
}
public List<User> getAll(){
return userMapper.getAll();
}
}
3、@ComponentScan、@Import
@ComponentScan:
作用:标注在springApplication类上(项目启动的类,有main方法的类) ,扫描组件所在的包
示例:
@ComponentScan("com.yangyida.admin")
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Import:
作用:向IOC容器中导入组件,可以标注在任意的容器中组件的类上,controller、config类都可。
属性:可以放入一个Class类的数组
示例:
@Import({User.class,})
@COnfiguration
public class MyConfig {
//xxxx
}
@Import({USer.class})
@Controller
public class controller{
}
4、条件装配@Conditional
@Conditional是一个根注解,有很多的派生注解,常用的都是其派生注解
作用:满足Conditional指定的条件,则进行组件注入
派生注解:
@ConditionalOnBean 容器中有某个组件的时候再注入
@ConditionalOnMissingBean 容器中没有某个组件的时候注入
@ConditionalOnClass 当前项目中有某个类的时候注入
@ConditionalOnMissingClass 当前项目中没有某个类的时候注入
@ConditionalOnResource 项目类路径下有某个资源的时候注入
@ConditionalOnJava 是指定的某个java版本号的时候才注入
示例:
其他的注解类似
public class MyConfig {
/**
* ConditionalOnBean(name = "tom")
* 条件装配注解
* 如,该注解表示容器中有name为“tom”的组件时才添加user01这个组件,若是没有则不添加
*/
@ConditionalOnBean(name = "tom")
@ConditionalOnClass({User.class})
@Bean
public User user01(){
return new User("张三",18,tomcatPet());
}
@Bean
public Pet tomcatPet(){
return new Pet("tomcat");
}
}