千家信息网

spring4.0 之 @Configuration注解

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,@Configuration注解与spring-*.xml达到的目的是一样的。@Configuration是为了完全的取消xml配置文件而改用注解。下面将对其进行对比说明:beans的加载方式spri
千家信息网最后更新 2025年12月04日spring4.0 之 @Configuration注解

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

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配置:

    
@Componentpublic 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/testjdbc.username=testjdbc.password=123456jdbc.driverClassName=com.mysql.jdbc.Driverdruid.initialSize=10druid.minIdle=5druid.maxActive=20druid.maxWait=60000druid.poolPreparedStatements=truedruid.maxPoolPreparedStatementPerConnectionSize=33druid.timeBetweenEvictionRunsMillis=60000druid.minEvictableIdleTimeMillis=300000druid.validationQuery=select 1 from dualdruid.testWhileIdle=truedruid.testOnBorrow=falsedruid.testOnReturn=falsedruid.removeAbandoned=truedruid.removeAbandonedTimeout=1800druid.logAbandoned=truedruid.filters=stat,wall,slf4jdruid.logSlowSql=truedruid.loginUsername=testdruid.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

0