springBoot的注解的使用(一)

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");
    }
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页