目录
纯注解使用IoC
需要用到的注解
- @Component:写在类上,将该类的对象交由Spring管理,value属性自定义对象id值
- @Autowired:写在字段上,表示自动从Spring管理的对象中找到id名和字段名相同并且类型相同的对象,找不到的话找一个同类对象
- @Qualifier:写在@Autowired相同位置,当Autowired找到不止一个符合条件的对象时,根据Qualifier的value值装配bean对象,解除歧义
- @RunWith:针对测试类使用,传入SpringJunit4ClassRunner.class,可以让测试类的字段也自动注入,就不需要getBean方法获得对象,加了@RunWith就不需要加@Test
- @ContextConfiguration:针对测试类使用,导入配置文件,location属性填配置文件路径,如果是类路径则前面要加"classpath:",配置文件里的bean对象将也被交由Spring管理
- @CompnentScan:写在类上,扫描包下所有的注解
- @Import:导入另一个类中的bean对象
- @Configuration:写在类上,代表这是一个配置类,用这个类取代xml文件
- @PropertySource:导入一个properties文件的键值
- @Value:将字段设置成指定值(基本数据类型或String)
- @Bean:加在方法上,该方法返回的对象将被交由Spring管理
纯注解配置
编写配置类
@Configuration//标明这是一个配置类
@ComponentScan(basePackages = "tryanno")//扫描包内所有注解
@Import(JDBCConfig.class)//导入分支的配置类
public class MySpringConfig {
}
@Configuration//这里被配置类引用了,所以可加可不加
@PropertySource("classpath:db.properties")//引入properties文件
public class JDBCConfig {
@Value("${jdbc.driver}")//将driver字段设置成指定值
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean//调用Spring工厂里的ds对象,创建JdbcTemplate对象并将其加入到Spring工厂中
public JdbcTemplate getJDBCTemplate(DataSource ds){
return new JdbcTemplate(ds);
}
@Bean(name = "ds")//返回的DataSource将被存储在Spring工厂中
public DataSource getDataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("${jdbc.driver}");
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
编写Dao层
@Repository//等价于@Compnent
public class UserDaoImpl implements UserDao {
@Autowired
@Qualifier("jdbcTemplate")//将id为jdbcTemplate的JdbcTemplate对象自动装载进来
private JdbcTemplate template;
@Override
public User findByName(String name) {
// ApplicationContext ac = new ClassPathXmlApplicationContext("tryanno.xml");
// template = (JdbcTemplate) ac.getBean("jdbcTemplate");
String sql = "select * from user where username = ?";
return template.queryForObject(sql,new BeanPropertyRowMapper<>(User.class),name);
}
}
编写Service层
@Service//等价于@Compnent
public class UserServiceImpl implements UserService {
@Autowired//将UserDao对象自动装载进来
private UserDao userDao;
@Override
public User findByName(String name) {
return userDao.findByName(name);
}
}
编写Test类
@RunWith(SpringJUnit4ClassRunner.class)//Junit专用
//@ContextConfiguration(locations = "classpath:Mybatis-Spring.xml")//用配置文件加载
@ContextConfiguration(classes = MySpringConfig.class)//用配置类加载
public class Web {
@Autowired//自动装载一个UserService对象
private UserService userService
@Test
public void tryTest1(){
User user = userService.findByName("指针信息");
System.out.println(user);
}
}
MyBatis和Spring整合
导入jar包
注意mybatis-spring的版本,在maven官网查看对应兼容mybatis和spring的版本
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
编写Dao层和Service层
public interface UserDao {
@Select("select * from user where username = #{username}")
User findByName(String name);
}
@Service//等价于@Compnent
public class UserServiceImpl implements UserService {
@Autowired//将UserDao对象自动装载进来
private UserDao userDao;
@Override
public User findByName(String name) {
return userDao.findByName(name);
}
}
编写Spring Config 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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描包内所有注解-->
<context:component-scan base-package="tryanno"/>
<!--导入properties文件-->
<context:property-placeholder location="db.properties"/>
<!--添加一个SqlSessionFactoryBean对象,产生工厂实例-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<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>
<!--添加一个MapperScannerConfigurer对象,用来给所有dao产生代理对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="tryanno.com.zzxx.dao"/>
</bean>
</beans>
编写Test类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:Mybatis-Spring.xml")//引入配置文件
public class Web {
@Autowired
private UserService userService;
@Test
public void tryTest1(){
User user = userService.findByName("指针信息");
System.out.println(user);
}
}
总结
- 纯注解使用spring时,要创建一个配置类代替xml配置文件
- Qualifier必须搭配Autowire使用
- spring和mybatis整合时,用到了MapperScannerConfigurer,用来给每个Dao接口创建一个动态代理对象