• IOC——Spring的bean的管理(xml配置文件)


    Bean实例化(三种方式)

      1、使用类的无参构造进行创建(大多数情况下)

      <bean id="user" class="com.bjxb.ioc.User"></bean>

        (1)上面的代码使用的就是默认的无参构造的方式进行Bean的实例化

        (2)使用这种方法我们需要注意,如果类中没有无参构造,会出现异常

     

      2、使用静态工厂创建

        (1)创建静态的方法,返回类的对象,以User对象为例

      public class UserFactory {
      
          // 静态方法,返回User对象
          public static User getUser() {
              return new User();
          }
      }

     

        (2)配置文件中使用静态工厂创建对象

    <bean id="user" class="com.bjxb.ioc.UserFactory" factory-method="getUser"></bean>

     

      3、使用实例工厂创建

         (1)创建普通方法,返回类的对象,以User对象为例

    public class UserFactory {
    
        // 普通方法,返回User对象
        public User getUser() {
            return new User();
        }
    }

     

        (2)配置文件中使用实例工厂创建对象

         <!-- 创建工厂对象 -->
         <bean id="userFactory" class="com.bjxb.ioc.UserFactory"></bean>
         <!-- 配置Bean对象 -->
         <bean id="user" class="com.bjxb.ioc.User" factory-bean="userFactory" factory-method="getUser"></bean>

     

     Bean标签的常用属性

      1、id属性

        给当前bean起名称,不能包含特殊符号,我们可以根据id值得到配置对象.

      2、class属性

        给当前bean指定对象所在类的全路径.

      3、name属性

        给当前bean起名称(与id属性类似),但是id属性值不能包含特殊符号,而在name属性值里面可以包含特殊符号。在Struts1框架中,action起名可以写符号(比如加上#),为了整合Struts1,解决遗留问题,扩展了name属性值。 

      4、scope属性

        scope属性可以指定Bean的作用范围

        (1)singleton:默认值,单例,对象只创建一次。

        (2)prototype:多例的。每次使用都会创建一个新的对象。

        (3)request:WEB项目中,Spring创建一个Bean的对象,将对象存到request域中。

        (4)session:WEB项目中,Spring创建一个Bean的对象,将对象存到session域中。

        (5)globalSession:WEB项目中,应用在Prolet环境,如果没有Prolet环境,那么globalSession相当于session。

    Bean的属性注入

      1、创建对象的时候,类中的属性被设置了默认值,称为bean的属性注入

      2、属性注入的三种方式(Spring只支持前两种,用的最多的是第一种——set方法注入):

        (1)Setter注入:使用属性的set方法进行注入。

    public class TestUser {
    
        private String name;
        
        public void setName(String name) {
            this.name=name;
        }
    }
    
    public static void main(String[] args) {
        TestUser user = new TestUser();
        user.setName("花咖");
    }

        (2)构造器注入:使用有参数的构造器进行注入。

    public class TestUser {
    
        private String name;
        
        public TestUser(String name) {
            this.name = name;
        }
    }
    
    public static void main(String[] args) {
        TestUser user = new TestUser("花咖");
    }

        (3)接口注入:让类继承带有方法的接口,在实现类继承的方法中,进行属性注入。  

    public interface UserDao {
    
        void InjectTest(String name);
    }
    
    public class TestUser implements UserDao{
    
        private String name;
        
        @Override
        public void InjectTest(String name) {
            // TODO Auto-generated method stub
            this.name=name;
        }
    }

      3、Spring中Bean的属性注入如何运用

        (1)Set方法注入

      实体类:

    public class PropertyDemo1 {
    
        private String bookname;
        
        // set方法
        public void setBookname(String bookname) {
            this.bookname = bookname;
        }
        
    }

      配置类中代码(默认是applicationContext.xml):

    <!-- 使用set方法注入属性 -->
    <bean id="demo1" class="com.bjxb.ioc.PropertyDemo1">
         <!-- 注入属性值
             name属性,类里面定义的属性名称
             value属性,设置具体的值
          -->
         <property name="bookname" value="大话设计模式"></property>
     </bean>

        (2)有参构造方式注入

      实体类:

    public class PropertyDemo2 {
    
        private String uname;
        
        public PropertyDemo2(String uname) {
            this.uname = uname;
        }
    }

      

      配置类中代码(默认是applicationContext.xml):

    <beans>
        <!-- 使用有参数构造注入属性 -->
        <bean id="demo2" class="com.bjxb.ioc.PropertyDemo2">
             <!-- 使用有参构造注入 -->
             <constructor-arg name="uname" value="花咖"></constructor-arg>
        </bean>
    </beans>   

      4、重点——注入对象类型的属性

        (1)service 中 注入 dao 层的类

      UserDao:

    public class UserDao {
    
        public void add() {
            System.out.println("dao.add........");
        }
    }

        

      UserService:

    public class UserService {
    
        // 1.定义dao类型属性
        public UserDao dao;
        
        // 2.生成set方法
        public void setDao(UserDao dao) {
            this.dao = dao;
        }
        
        public void add() {
            System.out.println("service.add.......");
            dao.add();
        }
    
    }

      配置类中代码(默认是applicationContext.xml):

    <!-- 注入对象类型的属性 -->
    <!-- 配置service和dao对象 -->
    <bean id="userDao" class="com.bjxb.ioc.UserDao"></bean>
    <bean id="userService" class="com.bjxb.ioc.UserService">
        <!-- 注入dao对象
            name属性值:service类里面的属性名称
            现在不要写value属性,因为刚才是字符串,现在是对象
            写ref属性,配置dao的bean标签中的id值
         -->
        <property name="dao" ref="userDao"></property>
    </bean>

      5、使用P命名空间进行属性注入(对于Setter注入简化

        (1)首先在beans标签中加入如下属性(复制上一行的beans命名空间):

        (2)然后我们在注入属性时使用 P 命名空间的方式:

          实体类:

    public class Person {
    
        private String pname;
        
        public void setPname(String pname) {
            this.pname=pname;
        }
        
    }

          

          配置类中代码(默认是applicationContext.xml):

    <!-- p名称空间注入 -->
    <bean id="person" class="com.bjxb.propertyTest.Person" p:pname="花咖"></bean>

      6、注入复杂类型属性

        (1)数组

        (2)list 集合

        (3)map 集合

        (4)properties 类型

         实体类:

    public class Person {
    private String[] arrs;
        private List<String> list;
        private    Map<String, String> map;
        private Properties properties;
        
        public void setArrs(String[] arrs) {
            this.arrs = arrs;
        }
    
        public void setList(List<String> list) {
            this.list = list;
        }
    
        public void setMap(Map<String, String> map) {
            this.map = map;
        }
    
        public void setProperties(Properties properties) {
            this.properties = properties;
        }
    
    }

        

        配置类中代码(默认是applicationContext.xml):

    <!-- 注入复杂类型的属性值 -->
    <bean id="person" class="com.bjxb.propertyTest.Person">
        <!-- 数组 -->
        <property name="arrs">
            <array>
                <value>小红</value>
                <value>小黄</value>
                <value>小蓝</value>
            </array>
        </property>
    
        <!-- list -->
        <property name="list">
            <list>
                <value>小白</value>
                <value>小黑</value>
                <value>小太</value>
            </list>
        </property>
    
        <!-- map -->
        <property name="map">
            <map>
                <entry key="aa" value="Lucy"></entry>
                <entry key="bb" value="Jerry"></entry>
                <entry key="cc" value="Tom"></entry>
            </map>
        </property>
    
        <!-- properties -->
        <property name="properties">
            <props>
                <prop key="driverclass">com.mysql.jdbc.driver</prop>
                <prop key="username">root</prop>
            </props>
        </property>
    </bean>

     

        

  • 相关阅读:
    Linux系统下的安装jdk和tomcat教程
    CentOS环境下安装jdk和tomcat
    Java的一个高性能快速深拷贝方法。Cloneable?
    AOP面向切面
    struts中实现ajax的配置信息
    上传下载固定配置
    mysql常用命令
    阿里云部署前后台项目
    PMP相关文件梳理
    面试思路总结
  • 原文地址:https://www.cnblogs.com/xb1223/p/10154895.html
Copyright © 2020-2023  润新知