(2)spring的IOC

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    
        <bean id="UserAction" class="action.UserAction" scope="prototype">
        <property name="user" ref="User"/>
<constructor-arg ref="UserService"/> <!-- 通过构造函数注入,构造函数字段,必须包含UserService,
同时需要一个不带参数的构造函数,记得把getter,setter注释-->
    </bean>
    
    <bean id="UserDao" class="dao.UserDao"/>
    
    <bean id="UserService" class="service.UserService">
    <property name="UserDao" ref="UserDao"/> <!-- 依赖注入,name为该类的属性名,ref为注入对象的bean-id -->
    </bean>
    
    <bean id="User" class="model.User">
    <property name="id" value="88"/> <!-- 属性用的是value,类用的是ref -->
    <property name="username" value="test01"/>
    <property name="names">
    <list>
    <value>aaa</value>
      <value>bbb</value>
    </list>
    </property>
    </bean> 
    
</beans>

注意:(1):scope默认是单例(singleton),如需设置为多态,scope="prototype"即可

(2):依赖注入,需要在类中设置setter,getter

 

action:

public class UserAction {
	private User user;
	private int id;
	private UserService UserService;
	
	
	
public UserAction() {
	
	}

public UserAction(UserService userService) {
		this.UserService = userService;
	}


public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public UserService getUserService() {
		return UserService;
	}

	public void setUserService(UserService userService) {
		this.UserService = userService;
	}

public void add() {
	UserService.add(user);
}

public void delete() {
	UserService.delete(id);
}

public void load() {
	UserService.delete(id);
}
}

service:

public class UserService implements IUserService {
	
	
	private UserDao UserDao;
	
	
	
	
	

	public UserDao getUserDao() {
		return UserDao;
	}

	public void setUserDao(UserDao userDao) {
		UserDao = userDao;
	}

	@Override
	public void add(User user) {
		// TODO 自动生成的方法存根
		UserDao.add(user);
	}

	@Override
	public void delete(int id) {
		// TODO 自动生成的方法存根
		UserDao.delete(id);
	}

	@Override
	public User load(int id) {
		// TODO 自动生成的方法存根
		UserDao.load(id);
		return null;
	}

}

 

dao:

public class UserDao implements IUserDao {

	@Override
	public void add(User user) {
		// TODO 自动生成的方法存根
System.out.println("add:"+user.getNames());
	}

	@Override
	public void delete(int id) {
		// TODO 自动生成的方法存根
		System.out.println("delete");
		
	}

	@Override
	public User load(int id) {
		// TODO 自动生成的方法存根
		System.out.println("load");
		return null;
	}

}

 

测试:

@Test
	void test02() {
	//HelloWorld helloWorld=(HelloWorld)factory.getBean("helloWorld");
	UserAction ua=factory.getBean("UserAction",UserAction.class);
	User u=new User();
	u.setId(1);
	u.setUsername("test");
	ua.setUser(u);
	ua.add();
	
	UserAction ua2=factory.getBean("UserAction",UserAction.class);
	ua2.add();//如果使用多例,输出null,单例的话和
//ua.add输出一样,这样对象没传参数进去,也把之前的对象添加到数据库,这样就不能使用单例了
	}

UserAction里面属性的值会根据不同线程得到不同的值,所以应该用多例,里面有属性,属性会变,就应该使用多例prototype

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值