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=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安全错误
数据库的锁怎样保障安全
千船网络技术有限公司
江苏超频服务器咨询报价
网络安全的独白
宁波手机游戏软件开发选哪家
哈工大威海网络技术研究院
互联网科技有限公司裁员
网络安全很枯燥吗
计算机网络技术基础书本答案
信创服务器的要求
打印服务器上市公司
怎么用手机创造我的世界服务器
开展网络安全检查党日活动
中文数据库的类型和主要内容
软件开发行业企业排行
ibm3550服务器线路图
网络安全实施过程
网络技术排名
湖北正规服务器机柜云主机
数据库设计不遵循范式
网络安全法 复旦大学
图灵畅想互联网科技是什么
软件开发一个月能加班几次
安卓 可以装哪些数据库
泰坦之旅怎么加入好友服务器
职业软件开发性价比高
数据库lname
x86服务器系统架构
宁河软件开发特点
湖北正规服务器机柜云主机
switchfifa22怎么连接服务器