Spring笔记(纯注解使用IoC)

目录

纯注解使用IoC

需要用到的注解

纯注解配置

编写配置类

编写Dao层

编写Service层

编写Test类

MyBatis和Spring整合

导入jar包

编写Dao层和Service层

编写Spring Config Xml文件

编写Test类

总结


纯注解使用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接口创建一个动态代理对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值