Spring Bean 的装填方式

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 文件夹的文档解除一下使用遇到的问题。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值