首页 > 代码库 > Spring中IOC的Annotation实现

Spring中IOC的Annotation实现

Spring中IOC的Annotation实现:

此处特别注意每个类中注释的注解及相关文字说明,可以更好的理解Spring中IOC的Annotation实现!

首先beans.xml中需要引入 context 的schema

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  5.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">  
  6.       

在XML中配置Spring对Annotation的相关配置:

[html] view plaincopyprint?
  1. <!-- 打开Spring的Annotation的支持 -->  
  2. <context:annotation-config />  
  3. <!-- 设定Spring去哪些包中找Annotation -->  
  4. <context:component-scan base-package="com.spring" />  

完整的XML配置:
[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  5.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">  
  6.       
  7.     <!-- 打开Spring的Annotation的支持 -->  
  8.     <context:annotation-config />  
  9.     <!-- 设定Spring去哪些包中找Annotation -->  
  10.     <context:component-scan base-package="com.spring" />  
  11. </beans>  

User实体类:
[java] view plaincopyprint?
  1. package com.spring.model;  
  2.   
  3. public class User {  
  4.   
  5.     public User() {  
  6.         super();  
  7.     }  
  8.   
  9.     private int id;  
  10.     private String username;  
  11.   
  12.     public int getId() {  
  13.         return id;  
  14.     }  
  15.   
  16.     public void setId(int id) {  
  17.         this.id = id;  
  18.     }  
  19.   
  20.     public String getUsername() {  
  21.         return username;  
  22.     }  
  23.   
  24.     public void setUsername(String username) {  
  25.         this.username = username;  
  26.     }  
  27.   
  28.     @Override  
  29.     public String toString() {  
  30.         return "User [id=" + id + ", username=" + username + "]";  
  31.     }  
  32.   
  33.     public User(int id, String username) {  
  34.         super();  
  35.         this.id = id;  
  36.         this.username = username;  
  37.     }  
  38.   
  39. }  

IUserDao接口:
[java] view plaincopyprint?
  1. package com.spring.dao;  
  2.   
  3. import com.spring.model.User;  
  4.   
  5. public interface IUserDao {  
  6.     public void add(User user);  
  7.     public void delete(int id);  
  8.     public User load(int id);  
  9. }  

UserDao类:
[java] view plaincopyprint?
  1. package com.spring.dao;  
  2.   
  3. import org.springframework.stereotype.Component;  
  4. import org.springframework.stereotype.Repository;  
  5.   
  6. import com.spring.model.User;  
  7. //等于完成了<bean id="userDao" class="com.spring.dao.UserDao"/>  
  8. //@Component("userDao") //@Component公共的创建bean的Annotation  
  9. @Repository("userDao")  //@Repository表示一般用于Dao的注入  
  10. public class UserDao implements IUserDao {  
  11.   
  12.     @Override  
  13.     public void delete(int id) {  
  14.         System.out.println("删除了"+id);  
  15.     }  
  16.   
  17.     @Override  
  18.     public User load(int id) {  
  19.         System.out.println("load了User");  
  20.         return null;  
  21.     }  
  22.   
  23.     @Override  
  24.     public void add(User user) {  
  25.         System.out.println("添加了"+user);  
  26.     }  
  27.   
  28. }  

IUserService接口:
[java] view plaincopyprint?
  1. package com.spring.service;  
  2.   
  3. import com.spring.model.User;  
  4.   
  5. public interface IUserService {  
  6.     public void add(User user);  
  7.     public void delete(int id);  
  8.     public User load(int id);  
  9. }  

UserService类:
[java] view plaincopyprint?
  1. package com.spring.service;  
  2.   
  3. import javax.annotation.Resource;  
  4.   
  5. import org.springframework.stereotype.Component;  
  6. import org.springframework.stereotype.Service;  
  7.   
  8. import com.spring.dao.IUserDao;  
  9. import com.spring.model.User;  
  10.   
  11. //@Component(value=http://www.mamicode.com/"userService")  
  12. @Service("userService")     //业务层一般用@Service注入  
  13. public class UserService implements IUserService {  
  14.     private IUserDao userDao;  
  15.       
  16.     public IUserDao getUserDao() {  
  17.         return userDao;  
  18.     }  
  19.       
  20.     //默认通过名称注入,在JSR330中提供了@Inject来注入  
  21.     @Resource  
  22.     public void setUserDao(IUserDao userDao) {  
  23.         this.userDao = userDao;  
  24.     }  
  25.   
  26.     @Override  
  27.     public void add(User user) {  
  28.         userDao.add(user);  
  29.     }  
  30.   
  31.     @Override  
  32.     public void delete(int id) {  
  33.         userDao.delete(id);  
  34.     }  
  35.   
  36.     @Override  
  37.     public User load(int id) {  
  38.         return userDao.load(id);  
  39.     }  
  40.   
  41. }  

UserAction类:
[java] view plaincopyprint?
  1. package com.spring.action;  
  2.   
  3. import javax.annotation.Resource;  
  4.   
  5. import org.springframework.context.annotation.Scope;  
  6. import org.springframework.stereotype.Component;  
  7. import org.springframework.stereotype.Controller;  
  8.   
  9. import com.spring.model.User;  
  10. import com.spring.service.IUserService;  
  11.   
  12. //@Component("userAction")  
  13. @Controller("userAction")   //MVC的控制层一般使用@Controller  
  14. @Scope("prototype")     //设置多例  
  15. public class UserAction {  
  16.     private User user;  
  17.     private IUserService userService;  
  18.     private int id;  
  19.       
  20.     public User getUser() {  
  21.         return user;  
  22.     }  
  23.   
  24.     public void setUser(User user) {  
  25.         this.user = user;  
  26.     }  
  27.       
  28.     public IUserService getUserService() {  
  29.         return userService;  
  30.     }  
  31.   
  32.     @Resource  
  33.     public void setUserService(IUserService userService) {  
  34.         this.userService = userService;  
  35.     }  
  36.   
  37.     public int getId() {  
  38.         return id;  
  39.     }  
  40.   
  41.     public void setId(int id) {  
  42.         this.id = id;  
  43.     }  
  44.   
  45.     public void add(){  
  46.         userService.add(user);  
  47.     }  
  48.       
  49.     public void delete(){  
  50.         userService.delete(id);  
  51.     }  
  52.       
  53.     public void load(){  
  54.         userService.load(id);  
  55.     }  
  56. }  

测试类:
[java] view plaincopyprint?
  1. package com.spring.test;  
  2.   
  3. import org.junit.Test;  
  4. import org.springframework.beans.factory.BeanFactory;  
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. import com.spring.action.UserAction;  
  8. import com.spring.model.User;  
  9.   
  10. public class TestSpring {  
  11.     //创建Spring工厂  
  12.     private BeanFactory beanFactory=new ClassPathXmlApplicationContext("beans.xml");  
  13.       
  14.     @Test  
  15.     public void testUser(){  
  16.         UserAction ua=beanFactory.getBean("userAction",UserAction.class);  
  17.         User user=new User(1,"我叫spring");  
  18.         ua.setUser(user);  
  19.         ua.add();  
  20.         //单例的时候添加相同的内容,多例添加为null  
  21.         UserAction ua1=beanFactory.getBean("userAction",UserAction.class);  
  22.         ua1.add();  
  23.     }  
  24.       
  25. }  

运行结果及项目结果图:

Spring中IOC的Annotation实现