Spring中IOC的Annotation案例(非底层)

来源:互联网 发布:手机视频变音软件 编辑:程序博客网 时间:2024/04/27 18:54

Spring中IOC的Annotation实现:

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

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

<?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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

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

<!-- 打开Spring的Annotation的支持 --><context:annotation-config /><!-- 设定Spring去哪些包中找Annotation --><context:component-scan base-package="com.spring" />

完整的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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"><!-- 打开Spring的Annotation的支持 --><context:annotation-config /><!-- 设定Spring去哪些包中找Annotation --><context:component-scan base-package="com.spring" /></beans>

User实体类:
package com.spring.model;public class User {public User() {super();}private int id;private String username;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + "]";}public User(int id, String username) {super();this.id = id;this.username = username;}}

IUserDao接口:
package com.spring.dao;import com.spring.model.User;public interface IUserDao {public void add(User user);public void delete(int id);public User load(int id);}

UserDao类:
package com.spring.dao;import org.springframework.stereotype.Component;import org.springframework.stereotype.Repository;import com.spring.model.User;//等于完成了<bean id="userDao" class="com.spring.dao.UserDao"/>//@Component("userDao")//@Component公共的创建bean的Annotation@Repository("userDao")//@Repository表示一般用于Dao的注入public class UserDao implements IUserDao {@Overridepublic void delete(int id) {System.out.println("删除了"+id);}@Overridepublic User load(int id) {System.out.println("load了User");return null;}@Overridepublic void add(User user) {System.out.println("添加了"+user);}}

IUserService接口:
package com.spring.service;import com.spring.model.User;public interface IUserService {public void add(User user);public void delete(int id);public User load(int id);}

UserService类:
package com.spring.service;import javax.annotation.Resource;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;import com.spring.dao.IUserDao;import com.spring.model.User;//@Component(value="userService")@Service("userService")//业务层一般用@Service注入public class UserService implements IUserService {private IUserDao userDao;public IUserDao getUserDao() {return userDao;}//默认通过名称注入,在JSR330中提供了@Inject来注入@Resourcepublic void setUserDao(IUserDao userDao) {this.userDao = userDao;}@Overridepublic void add(User user) {userDao.add(user);}@Overridepublic void delete(int id) {userDao.delete(id);}@Overridepublic User load(int id) {return userDao.load(id);}}

UserAction类:
package com.spring.action;import javax.annotation.Resource;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;import org.springframework.stereotype.Controller;import com.spring.model.User;import com.spring.service.IUserService;//@Component("userAction")@Controller("userAction")//MVC的控制层一般使用@Controller@Scope("prototype")//设置多例public class UserAction {private User user;private IUserService userService;private int id;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public IUserService getUserService() {return userService;}@Resourcepublic void setUserService(IUserService userService) {this.userService = userService;}public int getId() {return id;}public void setId(int id) {this.id = id;}public void add(){userService.add(user);}public void delete(){userService.delete(id);}public void load(){userService.load(id);}}

测试类:
package com.spring.test;import org.junit.Test;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.spring.action.UserAction;import com.spring.model.User;public class TestSpring {//创建Spring工厂private BeanFactory beanFactory=new ClassPathXmlApplicationContext("beans.xml");@Testpublic void testUser(){UserAction ua=beanFactory.getBean("userAction",UserAction.class);User user=new User(1,"我叫spring");ua.setUser(user);ua.add();//单例的时候添加相同的内容,多例添加为nullUserAction ua1=beanFactory.getBean("userAction",UserAction.class);ua1.add();}}

运行结果及项目结果图:



9 9