spring4.0 之 @Configuration注解
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,@Configuration注解与spring-*.xml达到的目的是一样的。@Configuration是为了完全的取消xml配置文件而改用注解。下面将对其进行对比说明:beans的加载方式spri
千家信息网最后更新 2026年11月02日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=123456xml配置:
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
配置
注解
方式
将对
数据
数据库
文件
目的
参考
监控
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
蓝思科技飞鸽互联网
美国互联网保险保险科技
互联网科技公司税收优惠
金融科技创新监管互联网金融
互联网科技金融公司
西安互联网科技
广州互联网络科技有限公司
壕鑫互联网络科技
人人互联网科技是培训
新华互联网科技2019
港股科技和互联网
晓花互联网科技有限公司网址
哈尔滨屹滨互联网科技有限公司
允成互联网科技有限公司融资
南博望互联网科技有限公司
恒生互联网科技业指数调整周期
锡山区互联网智能科技产品供应
互联网企业科技类企业如何做账
安徽零酒互联网科技有限公司
互联网科技企业文化
手冲咖啡和咖啡机区别
博彦科技互联网金融
互联网科技的
奇酷互联网络科技
唐信互联网科技
深圳天众互联网科技公司
河南猎农互联网科技有限公司
和信科技工业互联网
黑科技 体验场景 互联网大会
山东蛋芒互联网科技有限公司