Spring框架[email protected]
使用@Resource注解,实现组件装配,默认按照名称匹配。
![Spring框架[email protected] Spring框架[email protected]](https://cdn.ancii.com/article/image/v1/sw/wV/kP/PkwwVsGDmjDG9swnOi7SkjVAsMQAarn73E9S3mmSmcD-oxgEUIJaXjJ6aObBpTg0QcuO7Bv_2OUSBq8mlkC9Hw.png)
![Spring框架[email protected] Spring框架[email protected]](https://cdn.ancii.com/article/image/v1/sw/wV/kP/PkwwVsGDmjDG9swnOi7SkjVAsMQAarn73E9S3mmSmcD-oxgEUIJaXjJ6aObBpTg0E-zXD25vjVeLDWmBf6zEvQ.png)
下面的类都是使用到注解的类:
package dao.impl;
import org.springframework.stereotype.Repository;
import dao.UserDao;
import entity.User;
/**
* 用户DAO类,实现IDao接口,负责User类的持久化操作
*/
@Repository("userDao")
public class UserDaoImpl implements UserDao {
public void save(User user) {
// 这里并未实现完整的数据库操作,仅为说明问题
System.out.println("保存用户信息到数据库");
//throw new RuntimeException("为了测试程序异常");
}
}package service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import service.UserService;
import dao.UserDao;
import entity.User;
/**
* 用户业务类,实现对User功能的业务管理
*/
@Service("userService")
public class UserServiceImpl implements UserService {
// 声明接口类型的引用,和具体实现类解耦合
@Resource(name="userDao")//通过resource注解进行装配
private UserDao dao;
public UserDao getDao() {
return dao;
}
public void setDao(UserDao dao) {
this.dao = dao;
}
public void addNewUser(User user) {
// 调用用户DAO的方法保存用户信息
dao.save(user);
System.out.println("注入进去的user对象的信息是:"+user.toString());
}
}applicationContext.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-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 扫描包中注解标注的类 -->
<context:component-scan base-package="service,dao" />
</beans>
测试方法:
package test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.UserService;
import service.impl.UserServiceImpl;
import entity.TestEntity;
import entity.User;
public class AopTest {
17
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService a = (UserService) ctx.getBean("userService");
User user=new User();
user.setUsername("丫丫");
a.addNewUser(user);
24 25 }运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:
现在,将@Resource(name="userDao")的name属性去掉,@Resource
运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:
![Spring框架[email protected] Spring框架[email protected]](https://cdn.ancii.com/article/image/v1/sw/wV/kP/PkwwVsGDmjDG9swnOi7SkjVAsMQAarn73E9S3mmSmcD-oxgEUIJaXjJ6aObBpTg0NK6jjpUez4hmJRH77Rd1tw.png)
原因:resource属性默认是按照属性名称进行装配的,如果属性名称不对应的话,他会按照类型进行匹配的。
同样,这个属性也能够添加到setter方法上面
![Spring框架[email protected] Spring框架[email protected]](https://cdn.ancii.com/article/image/v1/sw/wV/kP/PkwwVsGDmjDG9swnOi7SkjVAsMQAarn73E9S3mmSmcD-oxgEUIJaXjJ6aObBpTg0i_JGl1cq9jUSongUpIoQ3w.png)
运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:
Resource注解默认的按照名称进行寻找指的是:public void setUserDao(UserDao dao) { 按照set后面的名称去寻找的
相应的我修改了:
package dao.impl;
import org.springframework.stereotype.Repository;
import dao.UserDao;
import entity.User;
/**
* 用户DAO类,实现IDao接口,负责User类的持久化操作
*/
@Repository("dao")
public class UserDaoImpl implements UserDao {
public void save(User user) {
// 这里并未实现完整的数据库操作,仅为说明问题
System.out.println("保存用户信息到数据库");
//throw new RuntimeException("为了测试程序异常");
}
}package dao.impl;
import org.springframework.stereotype.Repository;
import dao.UserDao;
import entity.User;
/**
* 用户DAO类,实现IDao接口,负责User类的持久化操作
*/
@Repository("userDao")
public class UserDaoImpl2 implements UserDao {
public void save(User user) {
// 这里并未实现完整的数据库操作,仅为说明问题
System.out.println("保存用户信息到数据库111111111111");
//throw new RuntimeException("为了测试程序异常");
}
}package service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import service.UserService;
import dao.UserDao;
import entity.User;
/**
* 用户业务类,实现对User功能的业务管理
*/
@Service("userService")
public class UserServiceImpl implements UserService {
// 声明接口类型的引用,和具体实现类解耦合
private UserDao dao;
public UserDao getDao() {
return dao;
}
@Resource//通过resource注解进行装配
public void setUserDao(UserDao dao) {
this.dao = dao;
}
public void addNewUser(User user) {
// 调用用户DAO的方法保存用户信息
dao.save(user);
System.out.println("注入进去的user对象的信息是:"+user.toString());
}
}运行测试方法:
package test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.UserService;
import service.impl.UserServiceImpl;
import entity.TestEntity;
import entity.User;
public class AopTest {
@Test
public void aopTest() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService a = (UserService) ctx.getBean("userService");
User user=new User();
user.setUsername("丫丫");
a.addNewUser(user);
}
}运行结果:
保存用户信息到数据库111111111111
注入进去的user对象的信息是: