看完我的这篇文章就可以和spring配置文件说さようなら了
日语小知识
这里给大家科普一下,大约7成的人都不会使用 「さようなら」这个短语
理由是 「さようなら」会给人一种“永别”的感觉
所以对于现在的日本人来说 「さようなら=永别」
这样的语感是确实存在的,所以さようなら这个词要少用哦
下面进入正题
spring注解有不懂的可以去看我的这一篇文章:https://www.cnblogs.com/xuewen1999/p/14007390.html,基本的注解都说有讲解
开始搬家
spring原始配置文件
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--加载perperties配置文件的信息-->
<context:component-scan base-package="com.baidu.service" />
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--加载druid资源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--spring整合mybatis后控制的创建连接用的对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--mybatis的returnType 起别名-->
<property name="typeAliasesPackage" value="com.baidu.domain"/>
</bean>
<!--加载mybatis映射配置的扫描,将其作为spring的bean进行管理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.baidu.dao"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
下面开始搬家,我们需要一个SpringConfig类,这个类就相当与我们的applicationContext.xml文件了
@Configuration
@ComponentScan({"com.baidu.service"})
@Import({DataSourceConfig.class, MybatisConfig.class})
public class SpringConfig {
}
我将jdbc的DataSource的配置和Mybatis的配置分别写在两个文件中,这样以便于我们开发和维护
相信看这个类的注解名称就可以看出,我们所需要搬家的第一行
<context:component-scan base-package="com.baidu.service" />
就可以转化为
@ComponentScan({"com.baidu.service"})
下面开始一点一点搬
dataSource搬家
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
=>
@Bean("dataSource")public DataSource getDataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setUsername(username); ds.setPassword(password); ds.setUrl(url); ds.setDriverClassName(driver); return ds;}
jdbc配置文件搬家
<context:property-placeholder location="classpath:jdbc.properties"/>
=> @PropertySource("classpath:jdbc.properties")
下面我们来将properties文件中的属性填充到我们的DataSources中吧
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.driver}")
private String driver;
非引用类型属性注入我们用Value注解
这样我们的DataSourceConfig类的编写就基本完成了
import javax.sql.DataSource;
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.driver}")
private String driver;
@Bean("dataSource")
public DataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setUsername(username);
ds.setPassword(password);
ds.setUrl(url);
ds.setDriverClassName(driver);
return ds;
}
}
看完上面的部分应该对xml转化为注解的基本操作,根据我下面的提示应该可以自己尝试编写MyBatisConfig的java类了,
提示:
<property name="dataSource" ref="dataSource"/>
如果需要注入的属性有ref,我们需要在@Bean的方法里面加入参数,参数前面还要AutoWriter注解,
@Bean
public SqlSessionFactoryBean getSqlSessionBean(@Autowired DataSource dataSource){
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("com.baidu.domain");
return bean;
}
提示就到这里了,先尝试编写再和我编写的有什么不同吧
<!--spring整合mybatis后控制的创建连接用的对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--mybatis的returnType 起别名-->
<property name="typeAliasesPackage" value="com.baidu.domain"/>
</bean>
<!--加载mybatis映射配置的扫描,将其作为spring的bean进行管理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.baidu.dao"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
上面xml中的配置 => MybatisConfig.java
import javax.sql.DataSource;
public class MybatisConfig {
@Bean
public SqlSessionFactoryBean getSqlSessionBean(@Autowired DataSource dataSource){
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("com.baidu.domain");
return bean;
}
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.baidu.dao");
msc.setSqlSessionFactoryBeanName("getSqlSessionBean");
return msc;
}
@Bean
public DataSourceTransactionManager getDataSourceTransactionManager(@Autowired DataSource dataSource){
DataSourceTransactionManager dtm = new DataSourceTransactionManager();
dtm.setDataSource(dataSource);
return dtm;
}
}
下面就可以进行测试了,但是如果我们还用原来的ClassPathXmlApplicationContext肯定是不行的,
我们用这个AnnotationConfigApplicationContext就可以让我们之前写的代码跑起来了
public class App {
public static void main(String[] args) {
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
AccountService bean = ac.getBean(AccountService.class);
System.out.println(bean.findAll());
}
}
成功打印
这里Serice中的源码就不贴上了,但是可以去我的gitee上下载,里面加入了一些简单的springmvc的配置