這里需要注意的一點是,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]