Bean的装配方式

(一)

知识点: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>
原文地址:https://www.cnblogs.com/sunxiaoyan/p/9105123.html