(一)
知识点:Spring容器支持多种形式的Bean的装配方式,比如基于XML的装配,基于注解的装配和自动装配(最常用的就是基于注解的装配)
Spring提供了两种基于xml的装配方式:设值注入(Setter Injection)和构造器注入(Construtor Injection)
1.InstanceTest.java
package com.inspur.assembling; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.inspur.static_factory.Bean2; public class InstanceTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String xmlPath = "com/inspur/assembling/bean1.xml"; //2.ApplicationContext 在加载文件时,对bean实例化 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); System.out.println(applicationContext.getBean("user1")); System.out.println(applicationContext.getBean("user2")); } }
2.User.java
package com.inspur.assembling; import java.util.List; public class User { //1.设值注入 //无参构造器 public User(){ } private String username; private Integer password; private List<String> list; //设置setter方法 public void setUsername(String username) { this.username = username; } public void setPassword(Integer password) { this.password = password; } public void setList(List<String> list) { this.list = list; } //2.构造器注入 //有参数构造器 public User(String username, Integer password, List<String> list) { super(); this.username = username; this.password = password; this.list = list; } public String toString(){ return "[User:username="+username+",password:"+password+",list:"+list+"]"; } }
3.bean1.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 设值注入 --> <bean id="user1" class="com.inspur.assembling.User"> <property name="username" value="zhangsan"></property> <property name="password" value="123"></property> <property name="list"> <list> <value>设值注入1</value> <value>设值注入2</value> <value>设值注入3</value> </list> </property> </bean> <!-- 构造器注入 --> <bean id="user2" class="com.inspur.assembling.User"> <constructor-arg index="0" value="lisi"></constructor-arg> <constructor-arg index="1" value="456"></constructor-arg> <constructor-arg index="2"> <list> <value>构造器注入1</value> <value>构造器注入2</value> </list> </constructor-arg> </bean> </beans>
(二)注解
1.InstanceTest.java
package com.inspur.zhujie1; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class InstanceTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String xmlPath = "com/inspur/zhujie1/bean.xml"; //2.ApplicationContext 在加载文件时,对bean实例化 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); UserController userController = (UserController)applicationContext.getBean("UserController"); userController.save(); } }
2.UserController.java
package com.inspur.zhujie1; import javax.annotation.Resource; import org.springframework.stereotype.Controller; @Controller("UserController") public class UserController { @Resource(name="userService") private UserService userService; public void save(){ this.userService.save(); System.out.println("UserController..save"); } }
3.UserDao.java
package com.inspur.zhujie1; public interface UserDao { public void save(); }
3.UserDaoImpl.java
package com.inspur.zhujie1; import org.springframework.stereotype.Repository; @Repository("userDao") public class UserDaoImpl implements UserDao{ public void save(){ System.out.println("UserDaoImpl.. save"); } }
4.UserService.java
package com.inspur.zhujie1; public interface UserService { public void save(); }
5.UserServiceImpl.java
package com.inspur.zhujie1; import javax.annotation.Resource; import org.springframework.stereotype.Service; @Service("userService") public class UserServiceImpl implements UserService{ @Resource(name="userDao") private UserDao userdao; public void save(){ userdao.save(); System.out.println("UserService...save.."); } }
6.bean.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-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 使用Context命名空间,在配置文件中开启相应的注解处理器 --> <context:annotation-config /> <!-- 使用Spring配合文件中的注解方式较大程度简化了Xml文件中的bean的配置,但仍然需要在spring文件中配置相应的bean --> <!-- userDao --> <!-- <bean id="userDao" class="com.inspur.annotation.UserDaoImpl"></bean> <bean id="userService" class="com.inspur.annotation.UserServiceImpl"></bean> <bean id="userController" class="com.inspur.annotation.UserController"></bean> --> <!-- context空间下扫描组件 将指定包下的所有的Bean类,进行注解解析 --> <context:component-scan base-package="com.inspur.zhujie1" /> </beans>
7.运行结果:
(四)自动注解
1.InstanceTest.java
package com.inspur.autozhujie; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class InstanceTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String xmlPath = "com/inspur/autozhujie/bean.xml"; //2.ApplicationContext 在加载文件时,对bean实例化 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); UserController userController = (UserController)applicationContext.getBean("userController"); userController.save(); } }
2.UserController.java
package com.inspur.autozhujie; public class UserController { private UserService userService; //为属性设置setter方法 public void setUserService(UserService userService){ this.userService=userService; } public void save(){ this.userService.save(); System.out.println("UserController..save"); } }
3.UserDao.java
package com.inspur.autozhujie; public interface UserDao { public void save(); }
4.UserDaoImpl.java
package com.inspur.autozhujie; public class UserDaoImpl implements UserDao { public void save(){ System.out.println("UserDaoImpl.. save"); } }
5.UserService.java
package com.inspur.autozhujie; public interface UserService { public void save(); }
6.UserServiceImpl.java
package com.inspur.autozhujie; public class UserServiceImpl implements UserService { private UserDao userDao; //为属性提供setter方法 public void setUserDao(UserDao userDao){ this.userDao=userDao; } public void save(){ userDao.save(); System.out.println("UserService...save.."); } }
7.bean.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-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 使用bean元素的autowise属性完成自动装配 --> <bean id="userDao" class="com.inspur.autozhujie.UserDaoImpl"></bean> <bean id="userController" class="com.inspur.autozhujie.UserController" autowire="byName"></bean> <bean id="userService" class="com.inspur.autozhujie.UserServiceImpl" autowire="byName" ></bean> </beans>