<?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