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

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.xsd
		http://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.xsd
		http://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;
	}

	@Override
	public 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 {

	@Override
	public void delete(int id) {
		System.out.println("删除了"+id);
	}

	@Override
	public User load(int id) {
		System.out.println("load了User");
		return null;
	}

	@Override
	public 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来注入
	@Resource
	public void setUserDao(IUserDao userDao) {
		this.userDao = userDao;
	}

	@Override
	public void add(User user) {
		userDao.add(user);
	}

	@Override
	public void delete(int id) {
		userDao.delete(id);
	}

	@Override
	public 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;
	}

	@Resource
	public 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");
	
	@Test
	public void testUser(){
		UserAction ua=beanFactory.getBean("userAction",UserAction.class);
		User user=new User(1,"我叫spring");
		ua.setUser(user);
		ua.add();
		//单例的时候添加相同的内容,多例添加为null
		UserAction ua1=beanFactory.getBean("userAction",UserAction.class);
		ua1.add();
	}
	
}

运行结果及项目结果图:

Spring中IOC的Annotation案例(非底层)_第1张图片


你可能感兴趣的:(spring,annotation,prototype,IOC)