spring4.0之@Configuration注解

@Configuration注解与spring-*.xml达到的目的是一样的。@Configuration是为了完全的取消xml配置文件而改用注解。下面将对其进行对比说明:

创新互联建站成立与2013年,先为禹王台等服务建站,禹王台等地企业,进行企业商务咨询服务。为禹王台企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

beans的加载方式

spring-.xml的加载方式:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、ContextLoaderListener(用于WEB);
纯注解的加载方式:AnnotationConfigApplicationContext、AnnotationConfigWebApplicationContext(用于WEB);

@Configuration与@Bean

xml配置:




    
        
        
    

public class Student {
    private Integer age;
    private String name;

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getAge() {
        System.out.println("Age : " + age);
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        System.out.println("Name : " + name);
        return name;
    }

    public void printThrowException() {
        System.out.println("Exception raised");
        throw new IllegalArgumentException();
    }

    public void init(){
        System.out.println("=============Student.init==============");
    }

    public void destroy(){
        System.out.println("=============Student.destroy==============");
    }
}
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-bean.xml");
    Student student = context.getBean(Student.class);
    student.getName();
    student.getAge();

注解配置:

@Configuration
@Lazy
//@Profile("test")
public class BeanConfiguration {
    @Bean(name = "student", initMethod = "init", destroyMethod = "destroy")
    @Scope("prototype")
    public Student student(){
        Student student = new Student();
        student.setAge(100);
        student.setName("this is a test name.");
        return student;
    }
}
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        annotationConfigApplicationContext.register(BeanConfiguration.class);
        annotationConfigApplicationContext.refresh();
        Student student1 = annotationConfigApplicationContext.getBean(Student.class);
        student1.getName();
        student1.getAge();

半xml配置半注解:

@Configuration
@Lazy
//@Profile("test")
public class BeanConfiguration {

    @Bean(name = "student", initMethod = "init", destroyMethod = "destroy")
    @Scope("prototype")
    public Student student(){
        Student student = new Student();
        student.setAge(100);
        student.setName("this is a test name.");
        return student;
    }
}
    
         
        
        
    
       ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-application.xml");
        Student student2 = context.getBean(Student.class);
        student2.getName();
        student2.getAge();
@Configuration与@ComponentScan

xml配置:



    

@Component
public class Teacher {
    private Integer age;
    private String name;
    private String id;
        。。。
}
ClassPathXmlApplicationContext context4 = 
new ClassPathXmlApplicationContext("classpath:spring-annotation-componentScan.xml");
Teacher teacher4 = context4.getBean(Teacher.class);
System.out.println("teacher4.hashCode = ["+teacher4.hashCode()+"]");

注解配置:

@Configuration
@ComponentScan("com.demo")
public class ComponentScanConfig {
}
        AnnotationConfigApplicationContext context5 = new AnnotationConfigApplicationContext();
        context5.register(ComponentScanConfig.class);
        context5.refresh();
        Teacher teacher5 = context5.getBean(Teacher.class);
        System.out.println("teacher5.hashCode = ["+teacher5.hashCode()+"]");
@Configuration与@PropertySource

jdbc.properties:

jdbc.url=jdbc:MySQL://172.28.1.1:3306/test
jdbc.username=test
jdbc.password=123456
jdbc.driverClassName=com.mysql.jdbc.Driver
druid.initialSize=10
druid.minIdle=5
druid.maxActive=20
druid.maxWait=60000
druid.poolPreparedStatements=true
druid.maxPoolPreparedStatementPerConnectionSize=33
druid.timeBetweenEvictionRunsMillis=60000
druid.minEvictableIdleTimeMillis=300000
druid.validationQuery=select 1 from dual
druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false
druid.removeAbandoned=true
druid.removeAbandonedTimeout=1800
druid.logAbandoned=true
druid.filters=stat,wall,slf4j
druid.logSlowSql=true
druid.loginUsername=test
druid.loginPassword=123456

xml配置:




    

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
                
        ClassPathXmlApplicationContext context6 = 
                new ClassPathXmlApplicationContext("classpath:spring-data.xml");
        DataSource dataSource = context6.getBean(DataSource.class);
        DruidDataSource druidDataSource = (DruidDataSource) dataSource;
        System.out.println("url = [" + druidDataSource.getUrl() + "]");
        System.out.println("username = [" + druidDataSource.getUsername() + "]");

注解配置:

@Configuration
@PropertySource("classpath:jdbc.properties")
public class DruidJdbcConfig {
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${druid.initialSize}")
    private int initialSize;
    @Value("${druid.minIdle}")
    private int minIdle;
    @Value("${druid.maxActive}")
    private int maxActive;
    @Value("${druid.maxWait}")
    private int maxWait;
    @Value("${druid.timeBetweenEvictionRunsMillis}")
    private int timeBetweenEvictionRunsMillis;
    @Value("${druid.minEvictableIdleTimeMillis}")
    private int minEvictableIdleTimeMillis;
    @Value("${druid.validationQuery}")
    private String validationQuery;
    @Value("${druid.testWhileIdle}")
    private boolean testWhileIdle;
    @Value("${druid.testOnBorrow}")
    private boolean testOnBorrow;
    @Value("${druid.testOnReturn}")
    private boolean testOnReturn;
    @Value("${druid.removeAbandoned}")
    private boolean removeAbandoned;
    @Value("${druid.removeAbandonedTimeout}")
    private int removeAbandonedTimeout;
    @Value("${druid.logAbandoned}")
    private boolean logAbandoned;
    @Value("${druid.filters}")
    private String filters;
    @Value("${druid.logSlowSql}")
    private boolean logSlowSql;
    @Value("${druid.loginUsername}")
    private String loginUsername;
    @Value("${druid.loginPassword}")
    private String loginPassword;

}
        AnnotationConfigApplicationContext context7 = new AnnotationConfigApplicationContext();
        context7.register(DruidJdbcConfig.class);
        context7.refresh();
        DruidJdbcConfig druidJdbcConfig = context7.getBean(DruidJdbcConfig.class);
        System.out.println("url = [" + druidJdbcConfig.getUrl() + "]");
        System.out.println("username = [" + druidJdbcConfig.getUsername() + "]");
@Configuration与@Import

spring-application.xml




    

spring-data.xml




     

     
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
          
        
        
        
        
          
        
        
        
        
        
        
        
        
        
        
        ClassPathXmlApplicationContext context8 = 
                new ClassPathXmlApplicationContext("classpath:spring-application.xml");
        query(context8.getBean(DataSource.class));

注解配置:

@Configuration
@PropertySource("classpath:jdbc.properties")
public class DruidJdbcConfig {
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${druid.initialSize}")
    private int initialSize;
    @Value("${druid.minIdle}")
    private int minIdle;
    @Value("${druid.maxActive}")
    private int maxActive;
    @Value("${druid.maxWait}")
    private int maxWait;
    @Value("${druid.timeBetweenEvictionRunsMillis}")
    private int timeBetweenEvictionRunsMillis;
    @Value("${druid.minEvictableIdleTimeMillis}")
    private int minEvictableIdleTimeMillis;
    @Value("${druid.validationQuery}")
    private String validationQuery;
    @Value("${druid.testWhileIdle}")
    private boolean testWhileIdle;
    @Value("${druid.testOnBorrow}")
    private boolean testOnBorrow;
    @Value("${druid.testOnReturn}")
    private boolean testOnReturn;
    @Value("${druid.removeAbandoned}")
    private boolean removeAbandoned;
    @Value("${druid.removeAbandonedTimeout}")
    private int removeAbandonedTimeout;
    @Value("${druid.logAbandoned}")
    private boolean logAbandoned;
    @Value("${druid.filters}")
    private String filters;
    @Value("${druid.logSlowSql}")
    private boolean logSlowSql;
    @Value("${druid.loginUsername}")
    private String loginUsername;
    @Value("${druid.loginPassword}")
    private String loginPassword;

}
@Configuration
@Import(DruidJdbcConfig.class)
public class DruidPoolConfig {
    private final static Logger LOGGER = LoggerFactory.getLogger(DruidPoolConfig.class);
    @Autowired
    private DruidJdbcConfig druidJdbcConfig;

    @Bean
    public DataSource dataSource(){
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(druidJdbcConfig.getUrl());
        datasource.setUsername(druidJdbcConfig.getUsername());
        datasource.setPassword(druidJdbcConfig.getPassword());
        datasource.setDriverClassName(druidJdbcConfig.getDriverClassName());
        datasource.setInitialSize(druidJdbcConfig.getInitialSize());
        datasource.setMinIdle(druidJdbcConfig.getMinIdle());
        datasource.setMaxActive(druidJdbcConfig.getMaxActive());
        datasource.setMaxWait(druidJdbcConfig.getMaxWait());
          datasource.setTimeBetweenEvictionRunsMillis(druidJdbcConfig.getTimeBetweenEvictionRunsMillis());
        datasource.setMinEvictableIdleTimeMillis(druidJdbcConfig.getMinEvictableIdleTimeMillis());
        datasource.setValidationQuery(druidJdbcConfig.getValidationQuery());
        datasource.setTestWhileIdle(druidJdbcConfig.isTestWhileIdle());
        datasource.setTestOnBorrow(druidJdbcConfig.isTestOnBorrow());
        datasource.setTestOnReturn(druidJdbcConfig.isTestOnReturn());
        datasource.setRemoveAbandoned(druidJdbcConfig.isRemoveAbandoned());
        datasource.setRemoveAbandonedTimeout(druidJdbcConfig.getRemoveAbandonedTimeout());
        datasource.setLogAbandoned(druidJdbcConfig.isLogAbandoned());
        try {
            datasource.setFilters(druidJdbcConfig.getFilters());
        } catch (SQLException e) {
            LOGGER.error("datasource.setFilters occur error.", e);
        }
        return datasource;
        }
}
        AnnotationConfigApplicationContext context9 = new AnnotationConfigApplicationContext();
        context9.register(DruidPoolConfig.class);
        context9.refresh();
        query(context9.getBean(DataSource.class));
    public static void query(DataSource dataSource) throws SQLException {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
                    connection = dataSource.getConnection();
            connection.setAutoCommit(false);
            String sql = "select id,`name`,mobile from t_agent_user where id = ?";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, 6497);
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String mobile = resultSet.getString("mobile");

                System.out.println("id = [" + id + "]");
                System.out.println("name = [" + name + "]");
                System.out.println("mobile = [" + mobile + "]");
            }
            } catch (SQLException e) {
            e.printStackTrace();
            if (connection != null)
                connection.rollback();
        }finally {
            if (connection != null){
                connection.commit();
                connection.setAutoCommit(true);
            }

            if (resultSet != null)
                resultSet.close();
            if (preparedStatement != null)
                preparedStatement.close();
            if (connection != null)
                connection.close();
        }
            }
@Configuration与@ImportResource
@Configuration
@ImportResource("classpath:spring-data.xml")
public class ImportResourceConfig {
}
        AnnotationConfigApplicationContext context10 = new AnnotationConfigApplicationContext();
        context10.register(ImportResourceConfig.class);
        context10.refresh();
        query(context10.getBean(DataSource.class));

参考:https://www.cnblogs.com/duanxz/p/7493276.html


网站名称:spring4.0之@Configuration注解
网页网址:http://ybzwz.com/article/jodoii.html