zoukankan      html  css  js  c++  java
  • 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/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/tx 
           http://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;
        
        @Bean
        public ComboPooledDataSource dataSource() throws PropertyVetoException
        {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass(driverClass);
            dataSource.setJdbcUrl(jdbcUrl);
            dataSource.setUser(user);
            dataSource.setPassword(password);
            return dataSource;
        }
        
        @Bean
        public JdbcTemplate jdbcTemplate() throws PropertyVetoException
        {
            JdbcTemplate jdbcTemplate = new JdbcTemplate();
            jdbcTemplate.setDataSource(dataSource());
            return jdbcTemplate;
        }
        
    //    @Bean
    //    public DataSourceTransactionManager transactionManager() throws PropertyVetoException
    //    {
    //        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
    //        transactionManager.setDataSource(dataSource());
    //        return transactionManager;
    //    }
        
        @Bean
        public UserService userService(UserDao userDao)
        {
            UserServiceImpl userService = new UserServiceImpl();
            userService.setUserDao(userDao);
            return 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)
        {
            return UserDao.query(id);
        }
        public void create2User()
        {
            UserDao.create2User();
        }
        public void setUserDao(UserDao userDao) {
            UserDao = userDao;
        }
    }
  • 相关阅读:
    ThinkPHP where方法:设置查询或操作条件
    微信小程序showToast延迟跳转页面
    uniapp微信小程序授权登录
    什么是二维码,什么是QR码?
    微信小程序授权登录开发流程图
    微信小程序提交审核并发布详细流程(一)
    微信小程序提交审核并发布详细流程2
    uniapp医院预约挂号微信小程序
    《爆款文案》写文案只需要四个步骤
    Spark学习笔记——读写ScyllaDB
  • 原文地址:https://www.cnblogs.com/coshaho/p/10500316.html
Copyright © 2011-2022 走看看