zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    用IIS做宿主的WCF服务
    Apache+mono+xsp搭建Linux下的asp.net平台
    web页面中的卡片布局代码
    GridView内的数据循环滚动
    adb 无法启动问题
    User interface
    动态生成linearLayout
    跳转到下一个activity
    android studio 快捷键
    [转]项目失败的经验
  • 原文地址:https://www.cnblogs.com/sunxiaoyan/p/9105123.html
Copyright © 2011-2022 走看看