@Configuration注解与spring-*.xml达到的目的是一样的。@Configuration是为了完全的取消xml配置文件而改用注解。下面将对其进行对比说明:
spring-.xml的加载方式:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、ContextLoaderListener(用于WEB);
纯注解的加载方式:AnnotationConfigApplicationContext、AnnotationConfigWebApplicationContext(用于WEB);
xml配置:
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-lazy-init="true" default-autowire="default"> <bean id="student" class="com.demo.enity.Student" init-method="init" destroy-method="destroy" lazy-init="false"> <property name="age" value="18"/> <property name="name" value="test"/> </bean> </beans>
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; } }
<bean class="com.demo.configuration.BeanConfiguration"/> <context:annotation-config/> <!--或者--> <context:component-scan base-package="com.demo"/> <context:annotation-config/>
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-application.xml"); Student student2 = context.getBean(Student.class); student2.getName(); student2.getAge();
xml配置:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.demo"/> </beans>
@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()+"]");
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配置:
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:property-placeholder ignore-unresolvable="true" location="jdbc.properties" /> <!-- 配置数据源 使用的是Druid数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${druid.initialSize}" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="${druid.maxActive}" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="${druid.minIdle}" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${druid.maxWait}" /> <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" /> <!-- 用来检测有效sql --> <property name="validationQuery" value="${druid.validationQuery}" /> <property name="testOnBorrow" value="${druid.testOnBorrow}" /> <property name="testOnReturn" value="${druid.testOnReturn}" /> <property name="testWhileIdle" value="${druid.testWhileIdle}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="${druid.removeAbandoned}" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="${druid.logAbandoned}" /> <!-- 监控数据库 <property name="filters" value="${druid.filters}" /> --> </bean> </beans>
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() + "]");
spring-application.xml
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <import resource="spring-data.xml" /> </beans>
spring-data.xml
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:property-placeholder ignore-unresolvable="true" location="jdbc.properties" /> <!-- 配置数据源 使用的是Druid数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" > <property name="url" value="${jdbc.url}" /> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${druid.initialSize}" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="${druid.maxActive}" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="${druid.minIdle}" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${druid.maxWait}" /> <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" /> <!-- 用来检测有效sql --> <property name="validationQuery" value="${druid.validationQuery}" /> <property name="testOnBorrow" value="${druid.testOnBorrow}" /> <property name="testOnReturn" value="${druid.testOnReturn}" /> <property name="testWhileIdle" value="${druid.testWhileIdle}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="${druid.removeAbandoned}" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="${druid.logAbandoned}" /> </bean> </beans>
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("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
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。