三种方式:基于xml的装配,基于annotation的装配,自动装配(自动装配不怎么使用所以没有做)
项目结构:
annotation装配:
基于xml的装配:
ps:在lib中引用了aop包。
1.基于xml的装配
User.java
1 package com.tiheima.assembled; 2 3 import java.util.List; 4 5 public class User { 6 private String username; 7 private Integer password; 8 private List<String> list; 9 @Override 10 public String toString() { 11 return "User [username=" + username + ", password=" + password + ", list=" + list + "]"; 12 } 13 14 15 /* 16 * 使用构造注入 17 * 提供带所有参数的构造方法 18 */ 19 public User(String username, Integer password, List<String> list) { 20 super(); 21 this.username = username; 22 this.password = password; 23 this.list = list; 24 } 25 26 /* 27 * 使用设置注入 28 * 提供默认无参构造函数 29 * 提供所有属性的set方法 30 */ 31 public User() { 32 super(); 33 34 } 35 36 public String getUsername() { 37 return username; 38 } 39 public void setUsername(String username) { 40 this.username = username; 41 } 42 public Integer getPassword() { 43 return password; 44 } 45 public void setPassword(Integer password) { 46 this.password = password; 47 } 48 public List<String> getList() { 49 return list; 50 } 51 public void setList(List<String> list) { 52 this.list = list; 53 } 54 55 }
XmlBeanAssembleTest.java
1 package com.tiheima.assembled; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 /*xml装配方式实例化bean*/ 7 8 public class XmlBeanAssembleTest { 9 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 String xmlString="com/tiheima/assembled/beans5.xml"; 13 ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlString); 14 System.out.println(applicationContext.getBean("user1")); 15 System.out.println(applicationContext.getBean("user2")); 16 } 17 18 }
beans5.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> 6 7 <!-- 基于xml的装配,构造注入方式装配User实例 --> 8 9 <bean id="user1" class=" 10 com.tiheima.assembled.User"> 11 <constructor-arg index="0" value="tom"></constructor-arg> 12 <constructor-arg index="1" value="123456"></constructor-arg> 13 <constructor-arg index="2"> 14 <list> 15 <value>"value1"</value> 16 <value>"value2"</value> 17 </list> 18 </constructor-arg> 19 20 <!-- 基于xml的装配,用设值注入方式装配User实例 --> 21 </bean> 22 <bean id="user2" class="com.tiheima.assembled.User"> 23 <property name="username" value="张三"></property> 24 <property name="password" value="654321"></property> 25 <property name="list"> 26 <list> 27 <value>"setlistvalue3"</value> 28 <value>"setlistvalue4"</value> 29 </list> 30 </property> 31 </bean> 32 </beans>
实验截图:
实例化了两个User对象。
2.基于annotation装配
UserDao.java
1 package com.itheima.annotation; 2 3 public interface UserDao { 4 public void save(); 5 }
UserDaoImpl.java
1 package com.itheima.annotation; 2 3 import org.springframework.stereotype.Repository; 4 5 @Repository("userDao") 6 public class UserDaoImpl implements UserDao { 7 8 @Override 9 public void save() { 10 // TODO Auto-generated method stub 11 System.out.println("userdao save"); 12 } 13 14 }
UserService.java
1 package com.itheima.annotation; 2 3 public interface UserService { 4 public void save(); 5 }
UserServiceImpl.java
1 package com.itheima.annotation; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 8 @Service("userService") 9 public class UserServiceImpl implements UserService { 10 11 //@Resource(name = "userDao") 12 @Autowired 13 private UserDao Userdao; 14 15 public void setUserdao(UserDao userdao) { 16 this.Userdao = userdao; 17 } 18 19 @Override 20 public void save() { 21 // TODO Auto-generated method stub 22 this.Userdao.save(); 23 System.out.println("userservice save"); 24 } 25 26 }
UserController.java
1 package com.itheima.annotation; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Controller; 7 8 @Controller("userController") 9 public class UserController { 10 11 //@Resource(name = "userService") 12 @Autowired 13 private UserService userService; 14 15 public void setUserService(UserService userService) { 16 this.userService = userService; 17 } 18 19 public void save() { 20 this.userService.save(); 21 System.out.println("controller save"); 22 } 23 }
AnnotationTest.java
1 package com.itheima.annotation; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 /*注解测试*/ 7 public class AnnotationTest { 8 9 public static void main(String[] args) { 10 // TODO Auto-generated method stub 11 String xmlpatString="com/itheima/annotation/beans6.xml"; 12 ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlpatString); 13 UserController userController=(UserController)applicationContext.getBean("userController"); 14 userController.save(); 15 } 16 17 }
beans6.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context-4.3.xsd"> 9 10 <!-- 开启注解处理器 --> 11 <!-- <context:annotation-config> 12 </context:annotation-config> 13 <bean id="userDao" class="com.itheima.annotation.UserDaoImpl" ></bean> 14 <bean id="userService" class="com.itheima.annotation.UserServiceImpl" ></bean> 15 <bean id="userController" class="com.itheima.annotation.UserController" ></bean> --> 16 17 18 <!-- 基于annotation的装配,使用context命名空间,通知spring扫描指定包下所有的bean类,进行注解 --> 19 <context:component-scan base-package="com.itheima.annotation"></context:component-scan> 20 21 22 23 </beans>
截图:
annotation注解中用xml上面的开启注解也可以,也可以用下面的扫描包。annotation装配比xml装配更为广泛。