基于xml使用:
准备:
1.Dao层(接口):
public interface UserDao {public void save();
}
1.1 Dao层(实现类):
public class UserDaoIim implements UserDao {@Overridepublic void save() {System.out.println("save");}
}
2.Service层(接口):
public interface UserService {public void save();
}
2.1 Service层(实现类):
public class UserServiceImp implements UserService {private UserDao userDao;@Overridepublic void save() {userDao.save();//调用dao层方法System.out.println("Service_save");}public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}
}
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 https://www.springframework.org/schema/context/spring-context.xsd"><bean id="UserDao" class="UserDaoIim的全限定名"></bean><bean id="UserService" class="UserServiceImp的全限定名"><property name="userDao" ref="UserDao"></property>
<!-- name="userDao":UserServiceImp的属性 ref="UserDao":中指上面beanid指--></bean>
</beans>
测试使用:
public class MyTest {private UserDao userDao;private UserService userService;@Testpublic void springs(){
// UserDao userDao = new UserDaoIim();
// userDao.save();ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");//文件路径,我放在resources根下。
// userDao = (UserDao) applicationContext.getBean("UserDao");//id名
// userDao.save();userService = (UserService) applicationContext.getBean("UserService");//id名userService.save();}
}
三种方式获取bean对象:
静态工厂模式获取:
静态工厂类(该类用到的实现类同上):
public class StaticFactory {public static UserDao getUserDao() {System.out.println("StaticFactory UserDao");return new UserDaoIim();}
}
xml关键配置:
<!-- 静态工厂获取bean。-->
<bean id="UserDao" class="com.dt.factory.StaticFactory" factory-method="getUserDao"></bean>
测试:
public class MyTest {private UserDao userDao;@Testpublic void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userDao = (UserDao) applicationContext.getBean("UserDao");
userDao.save();}
}
实例工厂模式获取:
实例工厂类(该类用到的实现类同上):
public class InstanceFactory {public UserDao getUserDao() {System.out.println("Instance UserDao");return new UserDaoIim();}
}
xml关键配置:
<!-- 实例工厂获取实例-->
<bean id="instanceFactory" class="com.dt.factory.InstanceFactory"></bean>
<bean id="UserDao" factory-bean="instanceFactory" factory-method="getUserDao"></bean>
测试:
public class MyTest {private UserDao userDao;@Testpublic void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userDao = (UserDao) applicationContext.getBean("UserDao");
userDao.save();}
}
自定义工厂获取bean:
工厂类:
public class MyFactoryBean implements FactoryBean {public Object getObject() throws Exception {System.out.println("FactoryBean getObject");return new UserDaoIim();}public Class<?> getObjectType() {return null;}
}
xml关键配置:
<!--FactoryBean 获取实例-->
<bean id="UserDao" class="com.dt.factory.MyFactoryBean"></bean>
测试:
public class MyTest {private UserDao userDao;@Testpublic void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userDao = (UserDao) applicationContext.getBean("UserDao");
userDao.save();}
}
赋值(引用类型用ref,基本数据类型用value):
实现类(赋值给userDao和number)(该类其他代码不变):
private UserDao userDao;
private Integer number;public Integer getNumber() {return number;}public void setNumber(Integer number) {this.number = number;}@Overridepublic void save() {userDao.save();System.out.println("Service_save");System.out.println(number);}
xml关键配置:
<bean id="UserDao" class="com.dt.dao.imp.UserDaoIim"></bean><bean id="UserServiceImp" class="com.dt.service.imp.UserServiceImp">
<property name="userDao" ref="UserDao"></property><property name="number" value="10"></property></bean>
测试:
public class MyTest {private UserService userService;@Testpublic void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userService = (UserService) applicationContext.getBean("UserServiceImp");
userService.save();}
}
实现类(该类其他代码不变):
public UserServiceImp() {}public UserServiceImp(UserDao userDao, Integer number) {this.userDao = userDao;this.number = number;}
xml关键配置:
<bean id="UserDao" class="com.dt.dao.imp.UserDaoIim"></bean>
<bean id="UserServiceImp" class="com.dt.service.imp.UserServiceImp"><constructor-arg name="userDao" ref="UserDao"></constructor-arg><constructor-arg name="number" value="20"></constructor-arg></bean>
测试:
public class MyTest {private UserDao userDao;private UserService userService;@Testpublic void springs(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userService = (UserService) applicationContext.getBean("UserServiceImp");
userService.save();}
}
自动装配(实现类和测试类不变):
xml关键配置:
<bean id="UserDao" class="com.dt.dao.imp.UserDaoIim"></bean>
<bean id="UserServiceImp" class="com.dt.service.imp.UserServiceImp" autowire="byType"></bean>
集合赋值
接口:
public interface Resource { }
实现类:
public class ResourceImp implements Resource {private String[] array;private List<String> list;private Set<String> set;private Map<String,String> map;public String[] getArray() {return array;}public void setArray(String[] array) {this.array = array;}public List<String> getList() {return list;}public void setList(List<String> list) {this.list = list;}public Set<String> getSet() {return set;}public void setSet(Set<String> set) {this.set = set;}public Map<String, String> getMap() {return map;}public void setMap(Map<String, String> map) {this.map = map;}@Overridepublic String toString() {return "ResourceImp{" +"array=" + Arrays.toString(array) +", list=" + list +", set=" + set +", map=" + map +'}';}
}
xml关键配置:
<bean id="UserDao" class="com.dt.dao.imp.UserDaoIim"></bean>
<!--集合赋值--><bean id="ResourceImp" class="com.dt.service.imp.ResourceImp"><property name="array"><array><value>sing</value><value>dance</value><value>rap</value></array></property><property name="list"><list><value>list1</value><value>list2</value><value>list3</value></list></property><property name="set"><set><value>set1</value><value>set2</value><value>set3</value></set></property><property name="map"><map><entry key="key1" value="value1"></entry><entry key="key2" value="value2"></entry><entry key="key3" value="value3"></entry></map></property></bean>
测试(其他不变):
public class MyTest {@Test
public void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
Resource resourceImp = (Resource) applicationContext.getBean("ResourceImp");
System.out.println(resourceImp);}
}
第三方管理(关键配置):
<bean id="名字" class="......"><property name="..." value="..."></property><property name="..." value="..."></property>
</bean>