精华内容
参与话题
问答
  • Spring新注解

    2020-11-12 01:03:54
    Spring新注解Spring新注解@Configuration@ComponentScan/ComponentScans@Bean Spring新注解 @Configuration 表明当前类是一个配置类。他的作用和bean,xml一样 @ComponentScan/ComponentScans -------- 作用:用于...

    Spring新注解

    @Configuration

    表明当前类是一个配置类。他的作用和bean,xml一样
    细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写

    @ComponentScan/ComponentScans

    -------- 作用:用于Spring 在创建容器时要扫描的包
    --------属性value/basePackages:两者的功能都是一样的 <context:component-scan base-package=“com.itheima”></context:component-scan>

    @Bean

    *Bean

    • 作用:用于把当前方法的返回值作为bean对象存入Spring的IOC容器中(Map结构:<key ,value> key => id ,value=>要创建的对象)
    • 属性:
    •       name:用于指定bean的id 默认值:不写时默认值当前方法的名称
      
    •       细节:当我们使用注解配置方法时。如果方法有参数,spring框架会去容器查找
      
    •       有没有可以使用的bean对象,查找的方式和Autowired的方法是一样的
      

    在进行注解开发的时候,还是有bean,xml文件的 存在,为了让Spring IOC纯注解开发,所有Spring还有其他的注解。
    如下面的context:component-scan标签,配置QueryRunner的bean标签,配置数据源的标签.
    如何用注解达到去除bean…xml。

    在这里插入图片描述

    创建配置类:
    SpringConfiguration.java

    package com.itheima.config;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import org.apache.commons.dbutils.QueryRunner;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.ComponentScans;
    import org.springframework.context.annotation.Configuration;
    
    import javax.sql.DataSource;
    import java.beans.PropertyVetoException;
    
    /*
    * 该类是一个配置类,他的 作用是和bean.xml一样的
    * Spring中的新注解
    * Configuration
    *           作用:当前类是一个配置类
    *ComponentScan
    *           作用:用于Spring 在创建容器时要扫描的包
    *           属性value/basePackages:两者的功能都是一样的 <context:component-scan base-package="com.itheima"></context:component-scan>
    *Bean
    *   作用:用于把当前方法的返回值作为bean对象存入Spring的IOC容器中(Map结构:<key ,value>  key => id ,value=>要创建的对象)
    *   属性:
    *           name:用于指定bean的id 默认值:不写时默认值当前方法的名称
    *           细节:当我们使用注解配置方法时。如果方法有参数,spring框架会去容器查找
    *           又名没有可以使用的bean对象,查找的方式和Autowired的方法是一样的
    *           */
    @Configuration
    @ComponentScan(basePackages = "com.itheima")
    public class SpringConfiguration {
        //创建一个QueryRunner对象
        @Bean(name = "runner")
        public QueryRunner createQueryRunner(DataSource dataSource){
            return new QueryRunner(dataSource);
        }
        @Bean(name ="dataSource")
        public DataSource createDataSource() throws PropertyVetoException {
            ComboPooledDataSource ds = new ComboPooledDataSource();
            ds.setDriverClass("com.mysql.cj.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesy?serverTimezone=UTC&useSSL=false&useUnicode=true &characterEncoding=UTF-8");
            ds.setUser("root");
            ds.setPassword("123456");
            return ds;
        }
    }
    

    除了创建配置类之外,还需要在获取核心容器对象的地方更改为通过注解获取核心容器对象
    AnnotationConfigApplicationContext(配置类的类名.class);

    //1.获取核心容器对象
            //ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
            ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
    

    在这里插入图片描述

    @Import注解

    除了主配置类之外还有其他的小的配置的类:当小的配置类既不是AnnotationConfigApplicationContext的参数 ,也没有在小配置类表明要扫描的包同时也不写Configuration注解表面他是个配置类,那么就需要在主配置类上面使用@Import注解。

    Import的作用:用于导入其他的配置类
    value:用于指定其他配置类的字节码,当我们使用@Import注解之后,有@Import注解的类为主配置类,而导入的都是子配置类。
    在这里插入图片描述

    在这里插入图片描述

    @PropertySource

    作用:用于指定properties文件的位置
    属性
    value:指定文件的名称和路径
    关键字classpath:表示类路径下
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • spring新注解

    2019-05-21 14:25:05
    * spring中的新注解 * Configuration * 作用:指定当前类是一个配置类 * 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可用不写 * * ComponenyScan * ...

    1.创建一个类代替bean.xml

    /**
     * 该类是一个配置类:他的作用的bean.xml时一样的
     * spring中的新注解
     * Configuration
     *        作用:指定当前类是一个配置类
     * 		 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可用不写
     *
     * ComponenyScan
     *         作用:用于通过注解指定spring在创建容器时要扫描的包
     *         属性:value:和basePackages的作用是一样的,都是告知spring在创建容器时要扫描的包
     *              使用此注解等同于在xml中配置了:<context:component-scan base-package="sise.cn"></context:component-scan>
     *
     * Bean
     *         作用:用于把当前方法的返回值作为bean对象存入spring的ioc容器中
     *         属性:name:用于指定Bean的id。默认值是当不写时,默认值是当前方法的名称
     *         细节:当我们是用注解配置方法是,如果方法有参数,spring框架回去容器中查找有没有可用的bean对象
     *                  查找的方式和Autowired注解是一样。
     * 
     * Import
     * 	 作用:用于导入其他的配置类
     * 	属性: value:用于指定其他配置类的字节码文件,当我们使用Import的注解之后,有Import注解的类就是主配置(父配置类)导入的都是子配置类
     */
    //@Configuration可不写,因为AnnotationConfigApplicationContext
    @ComponentScan("sise.cn")
    //@Import(JdbcConfig.class)当有其他配置类时可用此方法导入,导入的为子配置类
    public class SpringConfiguration {
    
        /**
         * 用于创建一个QueryRunner对象
         *
         * @param dataSource
         * @return
         */
    
        @Bean(name = "runner")
        public QueryRunner createQueryRunner(DataSource dataSource) {
            return new QueryRunner(dataSource);
        }
    
    
        /**
         * 创建数据源对象
         *
         * @return
         */
    
        @Bean(name = "dataSource")
        public DataSource createDaDataSource() {
            try {
                ComboPooledDataSource ds = new ComboPooledDataSource();
                ds.setDriverClass("com.mysql.jdbc.Driver");
                ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesyioc");
                ds.setUser("root");
                ds.setPassword("root");
                return ds;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    

    test:

    **
     * s使用junit单元测试:测试配置
     */
    public class AccountServiceTest {
    
        @Test
        public void testFindAll() {
            //1.获取容器对象
            /*ClassPathXmlApplicationContext cs = new ClassPathXmlApplicationContext("bean.xml");*/
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
            //2.得到业务层对象
            IAccountService as = ac.getBean("accountService",IAccountService.class);
            //3.执行方法
            List<Account> accounts = as.findAllAccount();
            for (Account account : accounts) {
                System.out.println(account);
            }
        }
    

    继续优化
    把数据域独立出来,在resource创建jdbcConfig.properties

    jdbc.driver("com.mysql.jdbc.Driver");
    jdbc.url("jdbc:mysql://localhost:3306/eesyioc");
    jdbc.username("root");
    jdbc.password("root");
    

    然后改造创建数据源对象

    / *
     * propertySource
     *         作用:用于指定properties文件的位置
     *         属性:value:指定文件的名称和路径
    
    
        *              关键字:classpath,表示类路径
         */
        
        
            @ComponentScan("sise.cn")
            @PropertySource("classpath:jdbcConfig.properties")
            public class SpringConfiguration {
    
            @Value("${jdbc.driver}")
            private String driver;
            @Value("${jdbc.url}")
            private String url;
            @Value("${jdbc.username}")
            private String username;
            @Value("${jdbc.password}")
            private String password;
    
        /**
             * 创建数据源对象
             *
             * @return
             */
        
            @Bean(name = "dataSource")
            public DataSource createDaDataSource() {
                try {
                    ComboPooledDataSource ds = new ComboPooledDataSource();
                    ds.setDriverClass(driver);
                    ds.setJdbcUrl(url);
                    ds.setUser(username);
                    ds.setPassword(password);
                    return ds;
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                }
    }
    

    选择xml和注解的方法原则:

    一般封装在jar包的别人写好的用xml, 自己写的一般用注解配置

    展开全文
  • 2.Spring注解开发 2.2Spring新注解

    2.Spring注解开发

    2.2Spring新注解

    展开全文
  • Spring新注解详解

    2020-09-05 10:38:37
    使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下: 非自定义的Bean的配置:<... 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解 @ComponentScan

    使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下:

    非自定义的Bean的配置:<bean>

    加载properties文件的配置:context:property-placeholder

    组件扫描的配置:context:component-scan

    引入其他文件:<import>

    注解 说明
    @Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
    @ComponentScan 用于指定 Spring 在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中的 <context:component-scan base-package="com.leon"/>一样
    @Bean 使用在方法上,标注将该方法的返回值存储到 Spring 容器中
    @PropertySource 用于加载.properties 文件中的配置
    @Import 用于导入其他配置类

    @Configuration

    @ComponentScan

    @Import

    @Configuration
    @ComponentScan("com.leon")
    @Import({DataSourceConfiguration.class})
    public class SpringConfiguration {
    }

    @PropertySource

    @value

    @PropertySource("classpath:jdbc.properties")
    public class DataSourceConfiguration {
        @Value("${jdbc.driver}")
        private String driver;
        @Value("${jdbc.url}")
        private String url;
        @Value("${jdbc.username}")
        private String username;
        @Value("${jdbc.password}")
        private String password;

    @Bean

    @Bean(name="dataSource")
    public DataSource getDataSource() throws PropertyVetoException { 
        ComboPooledDataSource dataSource = new ComboPooledDataSource(); 
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    } 

    测试加载核心配置类创建Spring容器

    @Test
    public void testAnnoConfiguration() throws Exception {
    ApplicationContext applicationContext = new 
              AnnotationConfigApplicationContext(SpringConfiguration.class);    
        UserService userService = (UserService)    
        applicationContext.getBean("userService");
        userService.save();
        DataSource dataSource = (DataSource) 
        applicationContext.getBean("dataSource");
        Connection connection = dataSource.getConnection(); 
        System.out.println(connection);
    }

     

    展开全文
  • 文章目录一、引言1、写到此处2、待改造的问题二、新注解说明1、 @Configuration2 、@ComponentScan3 、@Bean4、 @PropertySource5、 @Import6、通过注解获取容器:三、优化案例1、持久层2、业务层3 、pom.xml配置...

空空如也

1 2 3 4 5 ... 20
收藏数 3,351
精华内容 1,340
关键字:

spring新注解

spring 订阅