Spring Configuration注解使用
@Configuration是spring.xml的注解版。
@ComponentScan是<context:component-scan base-package="com.coshaho.*" />标签的注解版。
@ImportResource @Import是<import resource>标签的注解版。
@PropertySource是<context:property-placeholder location="classpath:jdbc.properties"/>标签的注解版。
@Bean是<bean>标签的注解版。
@EnableTransactionManagement是tx:annotation-driven标签的注解版。
我们把如下spring配置文件修改为@Configuration配置类
<?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"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 注解注入 --><context:component-scan base-package="com.coshaho.*" /><!-- 引入jdbc配置文件 --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 使用spring初始化DataSource --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driverClass}"></property><property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property><property name="user" value="${jdbc.user}"></property><property name="password" value="${jdbc.password}"></property></bean><!-- 使用JdbcTemplate封装DataSource --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!-- 定义事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!--使用注释事务 --><tx:annotation-driven transaction-manager="transactionManager" /></beans>
对应配置类为
package com.coshaho;import java.beans.PropertyVetoException;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;//import org.springframework.context.annotation.Import;//import org.springframework.context.annotation.ImportResource;import org.springframework.context.annotation.PropertySource;import org.springframework.jdbc.core.JdbcTemplate;//import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import com.coshaho.dao.UserDao;import com.coshaho.service.UserService;import com.coshaho.service.UserServiceImpl;import com.mchange.v2.c3p0.ComboPooledDataSource;@Configuration@ComponentScan@PropertySource("classpath:jdbc.properties")//@Import(OtherConfiguration.class)@EnableTransactionManagement //@ImportResource("classpath:transaction.xml")public class ApplicationConfig {@Value("${jdbc.driverClass}")private String driverClass;@Value("${jdbc.jdbcUrl}")private String jdbcUrl;@Value("${jdbc.user}")private String user;@Value("${jdbc.password}")private String password;@Beanpublic ComboPooledDataSource dataSource() throws PropertyVetoException{ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setDriverClass(driverClass);dataSource.setJdbcUrl(jdbcUrl);dataSource.setUser(user);dataSource.setPassword(password);retu dataSource;}@Beanpublic JdbcTemplate jdbcTemplate() throws PropertyVetoException{JdbcTemplate jdbcTemplate = new JdbcTemplate();jdbcTemplate.setDataSource(dataSource());retu jdbcTemplate;}//@Bean//public DataSourceTransactionManager transactionManager() throws PropertyVetoException//{//DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();//transactionManager.setDataSource(dataSource());//retu transactionManager;//}@Beanpublic UserService userService(UserDao userDao){UserServiceImpl userService = new UserServiceImpl();userService.setUserDao(userDao);retu userService;}private static ApplicationContext context;public static void main(String[] args){context = new AnnotationConfigApplicationContext(ApplicationConfig.class);UserService userService = (UserService) context.getBean("userService");System.out.println(userService.query(1));userService.create2User();}}
详细解释一下
1、@ComponentScan不添加base-package值,则表示默认从配置类路径扫描。
2、UserService依赖UserDao,则可以直接在构造方法中添加UserDao参数,spring自动按照类型注入。
3、@Import可以加载其他配置类。
4、一开始不知道如何在配置类中开启事务,便把事务配置在一个单独的xml中,通过@ImportResource引入。实际上直接使用@EnableTransactionManagement即可开启事务。
vo层,dao层代码和《基于注解的Spring事务配置》中的代码一致,用例中新增ApplicationConfig和service层代码,service层代码如下
package com.coshaho.service;import com.coshaho.vo.User;public interface UserService {public void create(String name, int age);public User query(int id);public void create2User();}
package com.coshaho.service;import com.coshaho.vo.User;import com.coshaho.dao.UserDao;public class UserServiceImpl implements UserService{private UserDao UserDao;public void create(String name, int age){UserDao.create(name, age);}public User query(int id){retu UserDao.query(id);}public void create2User(){UserDao.create2User();}public void setUserDao(UserDao userDao) {UserDao = userDao;}}
作者:coshaho
来源链接:https://www.cnblogs.com/coshaho/p/10500316.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。