这里需要注意的一点是,P命名空间进行注入,是建立在设值注入的基础上的,也就是说,一定要有setter方法才行,同时还要引入P命名空间的头信息(这点千万别忘记了)
典型的三层架构:
package dao;
import entity.User;
/**
* 增加DAO接口,定义了所需的持久化方法
*/
public interface UserDao {
public void save(User user);
}
1 package dao.impl;
2
3 import dao.UserDao;
4 import entity.User;
5
6 /**
7 * 用户DAO类,实现IDao接口,负责User类的持久化操作
8 */
9 public class UserDaoImpl implements UserDao {
10
11 public void save(User user) {
12 // 这里并未实现完整的数据库操作,仅为说明问题
13 System.out.println("保存用户信息到数据库");
14 }
15 }
1 package service;
2
3 import entity.User;
4
5 /**
6 * 用户业务接口,定义了所需的业务方法
7 */
8 public interface UserService {
9 public void addNewUser(User user);
10 }
1 package service.impl;
2
3 import service.UserService;
4 import dao.UserDao;
5 import entity.User;
6
7 /**
8 * 用户业务类,实现对User功能的业务管理
9 */
10 public class UserServiceImpl implements UserService {
11
12 // 声明接口类型的引用,和具体实现类解耦合
13 private UserDao dao;
14
15
16
17 // 生成无参构造方法
18 public UserServiceImpl() {
19
20 }
21
22 // 带参数构造方法 为dao进行赋值
23 public UserServiceImpl(UserDao dao) {
24 this.dao = dao;
25 }
26
27
28 public UserDao getDao() {
29 return dao;
30 }
31
32 // dao 属性的setter访问器,会被Spring调用,实现设值注入
33 public void setDao(UserDao dao) {
34 this.dao = dao;
35 }
36
37 public void addNewUser(User user) {
38 // 调用用户DAO的方法保存用户信息
39 dao.save(user);
40 System.out.println("注入进去的user对象的信息是:"+user.toString());
41 }
42 }
实体类:(这里也进行了相应的改动)
1 package entity;
2
3 /**
4 * 用户实体类
5 */
6 public class User implements java.io.Serializable {
7 private Integer id; // 用户ID
8 private String username; // 用户名
9 private String password; // 密码
10 private String email; // 电子邮件
11 private int age;//年龄
12
13
14 @Override
15 public String toString() {
16 return "User [id=" + id + ", username=" + username + ", password="
17 + password + ", email=" + email + ", age=" + age
18 + ", getAge()=" + getAge() + ", getId()=" + getId()
19 + ", getUsername()=" + getUsername() + ", getPassword()="
20 + getPassword() + ", getEmail()=" + getEmail()
21 + ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
22 + ", toString()=" + super.toString() + "]";
23 }
24
25 public int getAge() {
26 return age;
27 }
28
29 public void setAge(int age) {
30 this.age = age;
31 }
32
33 // getter & setter
34 public Integer getId() {
35 return id;
36 }
37
38 public void setId(Integer id) {
39 this.id = id;
40 }
41
42 public String getUsername() {
43 return username;
44 }
45
46 public void setUsername(String username) {
47 this.username = username;
48 }
49
50 public String getPassword() {
51 return password;
52 }
53
54 public void setPassword(String password) {
55 this.password = password;
56 }
57
58 public String getEmail() {
59 return email;
60 }
61
62 public void setEmail(String email) {
63 this.email = email;
64 }
65
66 }
编写测试方法:
1 package test;
2
3 import org.junit.Test;
4 import org.springframework.context.ApplicationContext;
5 import org.springframework.context.support.ClassPathXmlApplicationContext;
6
7 import service.UserService;
8 import service.impl.UserServiceImpl;
9
10 import entity.User;
11
12
13 public class AopTest {
14
15 @Test
16 public void aopTest() {
17 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
18 UserService service = (UserService) ctx.getBean("userService");
19 User user = (User) ctx.getBean("user");
20 service.addNewUser(user);
21 }
22
23 }
运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:User [id=null, username=强强, password=22222, email=1111@qq.com, age=15, getAge()=15, getId()=null, getUsername()=强强, getPassword()=22222, getEmail()=1111@qq.com, getClass()=class entity.User, hashCode()=1032986144, toString()=entity.User@3d921e20]