1 基于XML的装配
(1)创建User类
package com.kangxg.assemble;
import java.util.List;
public class User {
private String username;
private Integer password;
private List<String> list;
public User(String username,Integer password,List<String> list){
super();
this.username = username;
this.password = password;
this.list = list;
}
public User()
{
super();
}
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;
}
@Override
public String toString(){
return "User [username =" + username +",password = " + password + ",list =" + list+"]";
}
}
(2)创建配置文件
<?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-4.3.xsd">
<bean id="user1" class="com.kangxg.assemble.User" >
<constructor-arg index ="0" value = "tom"/>
<constructor-arg index ="1" value = "123456"/>
<constructor-arg index ="2">
<list>
<value> "constructorvalue1"</value>
<value> "constructorvalue2"</value>
</list>
</constructor-arg>
</bean>
<bean id="user2" class="com.kangxg.assemble.User" >
<property name ="username" value = "张三"/>
<property name ="password" value = "112233456"/>
<property name ="list">
<list>
<value> "constructorvalue1"</value>
<value> "constructorvalue2"</value>
</list>
</property>
</bean>
</beans>
(3)创建测试类
public class XmlBeanAssembleTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String xmlPath = "com/kangxg/assemble/Bean5.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("user1"));
System.out.println(applicationContext.getBean("user2"));
}
}
(4)debug执行程序
2.基于Annotation 的装配
(1)创建接口
package com.kangxg.annotation;
public interface UserDao {
public void sava();
}
(2)创建接口实现类
package com.kangxg.annotation;
import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
public void sava()
{
System.out.println("userdao...save...");
}
}
@Repository("userDao") 注解将 UserDaoImpl 类标识为Spring中Bean,其写法相当于配置文件中<bean id="userDao" class = "com.kangxg.annotation.UserDaoImpl"/>的编写
(3)创建接口UserService
public interface UserService {
public void sava();
}
(4)创建接口UserService实现类UserServiceImpl
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource(name = "userDao")
private UserDao userDao;
public void sava()
{
this.userDao.sava();
System.out.println("userservice...save...");
}
}
@Service("userService") 注解将 UserServiceImpl 类标识为Spring中Bean,其写法相当于配置文件中<bean id="userService" class = "com.kangxg.annotation.UserServiceImpl"/>的编写,然后使用@Resource注解标注在属性userDao上 ,这相当于配置文件中<property id="userDao" ref = "userDao"/>的写法
(5)创建控制器类
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
@Controller("userController")
public class UserController {
@Resource(name ="userService")
private UserService userService;
public void sava(){
this.userService.sava();
System.out.println("userController...save...");
}
}
首先使用 @Controller("userController") 注解将 UserController 类标识为Spring中Bean,其写法相当于配置文件中<bean id="userController" class = "com.kangxg.annotation.UserController"/>的编写,
然后使用@Resource注解标注在属性userService上 ,这相当于配置文件中<property id="userService" ref = "userService"/>的写法(6)创建配置文件beans6.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/>
<!-- 分别定义3个Bean实例 -->
<bean id="userDao" class="com.kangxg.annotation.UserDaoImpl" />
<bean id="userService" class="com.kangxg.annotation.UserServiceImpl" />
<bean id="userController" class="com.kangxg.annotation.UserController" />
<!-- 自动扫描
<context:component-scan base-package="com.kangxg.annotation"/>
-->
</beans>
注意:Spring4.0以上版本使用上面的代码对指定包中的注解进行扫描,需要先向项目中倒入Spring AOP 的JAR包 spring-aop-4.3.6-RELEASE.jar否则会报错。
(7)创建测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AnnotationAssembleTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String xmlPath = "com/kangxg/annotation/beans6.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
UserController userController = (UserController)applicationContext.getBean("userController");
userController.sava();
}
}
debug执行程序后
3.自动装配
虽然使用注解的方式装配Bean,在一定程度上减少了配置文件中的代码量,但是也有企业项目中是没有使用注解方式开发的,因为还有一种既可以减少代码量,又能够实现Bean的装配。使用 Spring的<bean>元素中包含一个autowire属性,通过设置这个属性值来自动装配Bean。所谓自动装配,就是将一个Bean自动地注入到其他Bean的Property中。
创建Bean6.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 元素的autowire 属性完成自动装配-->
<bean id="userDao" class="com.kangxg.annotation.UserDaoImpl" />
<bean id="userService" class="com.kangxg.annotation.UserServiceImpl" autowire = "byName" />
<bean id="userController" class="com.kangxg.annotation.UserController" autowire = "byName" />
</beans>
将UserServiceImpl和UserController类中的注解去掉,并增加属性的setter方法
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void setUserService(UserService userService){
this.userService = userService;
}
测试类更换配置文件名 重新debug程序后
心得:可以看下载的Spring中 spring-framework-reference 文件夹的文档解除一下使用遇到的问题。