美文网首页
SpringBoot注解

SpringBoot注解

作者: 凤非飞 | 来源:发表于2019-07-23 20:00 被阅读0次

    1.@Configuration



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

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
        xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/task/spring-task-4.0.xsd" default-lazy-init="false">
    
          <bean>.....</bean>
          <bean>.....</bean>
          ....
          ....
    
    .....
    
    

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

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

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

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

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

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

    <context:component-scan base-package="com.xxx.xxx" />,普通的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等价于<context:component-scan base-package=”com.dxz.demo”/>
    在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注解

          本文链接:https://www.haomeiwen.com/subject/xqtzlctx.html