为什么要有注解:
spring轻代码重配置,就导致了配置繁重,影响开发的效率,注解开发代替xml的配置文件,可以简化配置。
spring的原始注解:
spring原始注解主要是代替 < Bean>标签的配置。
使用上面的注解来进行实现一个简单的基于注解的开发:
dao层代码:
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("测试成功");
}
service层代码:
@Service("userservice")
public class UserServiceImpl implements UserService {
// @Autowired
// @Qualifier("userDao")
@Resource
private UserDao userDao;
@Override
public void save() {
userDao.save();
}
使用注解的方式进行依赖注入则不需要进行使用get方法,就可以实现依赖注入。
@Autowired 表示会按照 数据类型从spring容器中进行匹配,然后进行注入
【如果现在sprin容器中具有多个相同数据类型的bean那么这样就会出现错误,】
@Qualiffier是按照id的值从容器中进行匹配的但是此处要结合@Atowinertia注解一起使用
@Resource(name=””),如果加上name属性的话 会按照id的值进行寻找bean,如果不加的话是按照数据类型进行找bean
配置文件中的代码:
需要在配置问价中进行配置,从而继续组件扫描,但是组件扫描依赖于context空间
测试:
Test
public void sds(){
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("a.xml");
UserService userservice = classPathXmlApplicationContext.getBean(UserService.class);
userservice.save();
}
同时也是使用${****}表达式来进行注入
@Scope注解
spring的新注解
使用上述的注解并不能完全的替换spring配置文件中的配置,那么使用新注解就可以大幅度的简化开发了。主要是用来实现替换spring的配置文件
代码示例:
【使用注解的方式来代替spring的xml配置文件】
@Configuration
@ComponentScan("com.itheima.zhujie")//是用于配置组件扫描的
@PropertySource("classpath:jdbc.properties")//用于加载配置信息文件
public class SpringConfigurtion {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("dataSource")//Spring 会将当前方法的返回值以指定的名称存储到spring中,也可以不加参数,不加参数的时候用的多
public DataSource shd(){
DruidDataSource druidDataSource = new DruidDataSource();//获取Driver数据源
druidDataSource.setDriverClassName(driver);//获取数据源驱动
druidDataSource.setUrl(url);//获取数据库的地址
druidDataSource.setUsername(password);//数据库用户名
druidDataSource.setPassword(username);//数据库密码
return druidDataSource;
}
// @Bean
// public JdbcTemplate jdbcTemplate(){
// return new JdbcTemplate();
// }
}
测试:
@Test
public void test1(){
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringConfigurtion.class);
DataSource dataSource = (DataSource) annotationConfigApplicationContext.getBean("dataSource");
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//dbcTemplate.setDataSource(dataSource);
int i = jdbcTemplate.update("insert into account values(?,?,?)", 15,"root4", 1024);
System.out.println(i);
}
使用配置类和配置文件在加载配置文件信息的代码不相同 :
xml配置文件使用new ClassPathXmlApplicationContext(“”);
配置类使用: new AnnotationConfigApplicationContext(SpringConfigurtion.class);
spring集成juint
之前使用spring配置文件中的配置的Bean需要书写很多的代码:如加载配置文件等
使用junit负责创建spring容器,但是需要将配置文件或者主配置类告诉它,将需要测试的bean直接在测试类中进行注入,然后进行测试。
spring集成junit的步骤:
- 导入spring集成的junit坐标。
- 使用@RunWith注解替换原有的运行器
- 使用@ContextConfiguration注解指定配置问价或者是配置类
- 使用依赖注入,注入需要测试的对象
- 创建测试方法进行测试
配置类的代码:
@Configuration //表示该类是spring的核心配置类
@ComponentScan("com.itheima.zhujie")//是用于配置组件扫描的
@PropertySource("classpath:jdbc.properties")//用于加载配置信息文件
public class SpringConfigurtion {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("dataSource")//Spring 会将当前方法的返回值以指定的名称存储到spring中,也可以不加参数,不加参数的时候用的多
public DataSource shd(){
DruidDataSource druidDataSource = new DruidDataSource();//获取Driver数据源
druidDataSource.setDriverClassName(driver);//获取数据源驱动
druidDataSource.setUrl(url);//获取数据库的地址
druidDataSource.setUsername(password);//数据库用户名
druidDataSource.setPassword(username);//数据库密码
return druidDataSource;
}
dao层代码:
Repository("userDao")
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("测试成功");
}
service的代码:
ervice("userservice")
public class UserServiceImpl implements UserService {
// @Autowired
// @Qualifier("userDao")
@Resource
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
测试类的代码:
/**
*
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringConfigurtion.class);
DataSource dataSource = (DataSource) annotationConfigApplicationContext.getBean(DataSource.class);
Connection connection = dataSource.getConnection();
* 下面的代码主要就是用来简化上面的代码
*
* ***/
//使用全注解的方式进行加载
@RunWith(SpringJUnit4ClassRunner.class)//让spring来进行执行测试
//@ContextConfiguration("classpath:a.xml")
@ContextConfiguration(classes = SpringConfigurtion.class)
public class SpringJunitTest {
@Autowired
private UserServiceImpl userService;
@Test
public void sds(){
userService.save();
}