SpringBoot注解

1.@Configuration



@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(应用上下文)




      .....
      .....
      ....
      ....

.....

有些配置类需要随项目启动就加载

1、第一种自己写的类,Controller,Service。 用@controller @service即可

2、第二种,集成其它框架,比如集成shiro权限框架,集成mybatis分页插件PageHelper,第三方框架的核心类都要交于Spring大管家管理

@Configuration可理解为用spring的时候xml里面的标签
@Bean可理解为用spring的时候xml里面的标签

多个@Configuration就相当于多个spring.xml,就像mybatis-spring.xml,shiro-spring.xml这些xml会组合为一个整个的spring.xml

Spring Boot不是spring的加强版,所以@Configuration和@Bean同样可以用在普通的spring项目中,而不是Spring Boot特有的,只是在spring用的时候,注意加上扫包配置

,普通的spring项目好多注解都需要扫包,才有用,有时候自己注解用的挺6,但不起效果,就要注意这点。

Spring Boot则不需要,主要你保证你的启动Spring Boot main入口,在这些类的上层包就行


就像这样,DemoApplication是启动类

@Configuration和@Bean的Demo类

@Configuration  
public class ExampleConfiguration {  
  
    @Value("com.mysql.jdbc.Driver")  
    private String driverClassName;  
  
    @Value("jdbc://xxxx.xx.xxx/xx")  
    private String driverUrl;  
  
    @Value("${root}")  
    private String driverUsername;  
  
    @Value("123456")  
    private String driverPassword;  
  
    @Bean(name = "dataSource")  
    public DataSource dataSource() {  
        BasicDataSource dataSource = new BasicDataSource();  
        dataSource.setDriverClassName(driverClassName);  
        dataSource.setUrl(driverUrl);  
        dataSource.setUsername(driverUsername);  
        dataSource.setPassword(driverPassword);  
        return dataSource;  
    }  
  
    @Bean  
    public PlatformTransactionManager transactionManager() {  
        return new DataSourceTransactionManager(dataSource());  
    }  
  
}

这样,在项目中

@Autowired

private DataSource dataSource;

的时候,这个dataSource就是我们在ExampleConfiguration中配的DataSource



2.@ComponentScan


@ComponentScan等价于
在SpringBoot中方没有@bean,也没有@Configuration,但是需要特别关注
有时候在SpringBoot中,启动类没有在所有需要交给spring的bean的上面,就需要这个主动去扫描这个特殊的



3.@Mapper


Spring在扫描注解时,取消了扫描抽象类和接口,所以无法找到你用@reponsitory注解的dao接口,虽然在引用时看似可以注入,但是实际上不可以使用,并没有作为bean交给spring,所以必须使用@Mapper去注解,spring在编译时会为其创建实现类

mybatis支持的映射方式
1.基于xml的mapper.xml文件
2.基于java的使用Mapper接口class。

1.基于xml的mapper.xml文件
就是一个mapper接口对应一个mapper.xml,每个接口的方法都对应xml的sql操作

2.基于java的使用Mapper接口,只需要mapper接口,接口注解对应着接口方法,接口里有sql操作,接口方法注解主要是四个:@Insert、@Delete、@Update、@Select

@Mapper
public interface UserDAO {
    @Select("select * from user where name = #{name}")
    User find(String name);
   
    /**
      * 对于多个参数来说,每个参数之前都要加上@Param注解,
      * 要不然会找不到对应的参数进而报错
      */
    @Select("select * from user where name = #{name} and pwd = #{pwd}")
    User login(@Param("name")String name, @Param("pwd")String pwd);
}


4.@MapperScan


Spring在扫描注解时,取消了扫描抽象类和接口,所以无法找到你用@reponsitory注解的dao接口,所以必须使用@Mapper去注解
在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper注解,将mapper接口注入到Spring,但是如果每一给mapper都添加@mapper注解会很麻烦,这时可以使用@MapperScan注解来扫描包。

经测试发现,@MapperScan注解只会扫描包中的接口,不会扫描类,所以可以在包中写Provider类。在启动类上添加@MapperScan("com.demo.mapper"):扫描指定包中的接口


1.Spring中的Profile 是什么?
Spring中的Profile功能其实早在Spring 3.1的版本就已经出来,它可以理解为我们在Spring容器中所定义的Bean的逻辑组名称,只有当这些Profile被激活的时候,才会将Profile中所对应的Bean注册到Spring容器中。举个更具体的例子,我们以前所定义的Bean,当Spring容器一启动的时候,就会一股脑的全部加载这些信息完成对Bean的创建;而使用了Profile之后,它会将Bean的定义进行更细粒度的划分,将这些定义的Bean划分为几个不同的组,当Spring容器加载配置信息的时候,首先查找激活的Profile,然后只会去加载被激活的组中所定义的Bean信息,而不被激活的Profile中所定义的Bean定义信息是不会加载用于创建Bean的。

2.为什么要使用Profile
由于我们平时在开发中,通常会出现在开发的时候使用一个开发数据库,测试的时候使用一个测试的数据库,而实际部署的时候需要一个数据库。以前的做法是将这些信息写在一个配置文件中,当我把代码部署到测试的环境中,将配置文件改成测试环境;当测试完成,项目需要部署到现网了,又要将配置信息改成现网的,真的好烦。。。而使用了Profile之后,我们就可以分别定义3个配置文件,一个用于开发、一个用户测试、一个用户生产,其分别对应于3个Profile。当在实际运行的时候,只需给定一个参数来激活对应的Profile即可,那么容器就会只加载激活后的配置文件,这样就可以大大省去我们修改配置信息而带来的烦恼。

3.如何用
既可以放在@bean上,也可以直接放在@Configuration上

你可能感兴趣的:(SpringBoot注解)