• [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。


    一、Spring Ioc容器详解(1)    20131105
    1.一切都是Bean
    Bean可是一个字符串或者是数字,一般是一些业务组件.
    粒度一般比较粗.
    2.Bean的名称
    xml配置文件中,id属性可以检测是否唯一。name是可以重复的。
    一个bean的实现可以有多个名字,别名
    <alias name="p3" alias="p4"/>
    
    3.Spring 容器的初始化过程(不同的实现有不同的过程) 
    A、根据加载的配置文件信息注解Bean的信息(BeanDefinition)到Bean工厂
    B、根据得到的Beandefintion对象来确定要不要初始化一些Bean
    C、处理依赖注入(根据BeanDefintion 中有关依赖注入的信息)
    D、客户端通过容器来查询业务组件
    E、当容器关闭的时候,销毁
    
    4.Bean工厂及应用上下文
    A、BeanFactory--Spring最基本的容器接口
    getBean(String)
    getBean(String, Class<T>) ==获得指定类型的bean,如果符合条件的
    所谓单例,是说容器只需要创建一次
    containsBean(String)
    
    isSingleton(String)
    
    boolean isPrototype(String name)
    
    B、ApplicationContext--应用层面容器(提供访问环境资源信息的相关方法)
    
    
    ApplicationContext getParent();表现了一种树状结构。
    
    applicationContext会在初始化时自动加载单例Bean
    而beanFactory只有在用的时候才会初始化
    
    5.三种实例化bean的方式
    A.通过构造函数
    默认的无参的构造函数
        
    通过带一个参数的进行初始化
    public Person(String name) {
            super();
            System.out.println("初始化Person!传进来姓名参数!");
            this.name = name;
        }
        
    B 使用静态工厂
    
        <!-- 使用静态工厂方法 进行初始化 -->
        <bean id="p3" class="com.lspring.springIoc.PersonFactory"
            factory-method="createPerson"></bean>
        <!-- 使用带参数的静态工厂方法创建bean -->
        <bean id="p4" class="com.lspring.springIoc.PersonFactory"
            factory-method="createPerson">
            <constructor-arg value="五笔输入法"></constructor-arg>
        </bean>
    
    public static Person createPerson(){
            System.out.println("通过静态工厂实例化bean!");
            return new Person();
        }
        
        public static Person createPerson(String name){
            System.out.println("通过静态工厂实例化bean!"+name);
            return new Person(name);
        }
    
    C 使用动态工厂
    
    <!-- 使用动态工厂方法 进行初始化 -->
        <!-- 先定义一个工厂 -->
        <bean id="factoryBean" class="com.lspring.springIoc.PersonFactoryFamily">
            <property name="family" value="王"></property>
        </bean>
        <bean id="p5" factory-bean="factoryBean" factory-method="createPerson">
            <constructor-arg value="小二"></constructor-arg>
        </bean>
        <bean id="p6" factory-bean="factoryBean" factory-method="createPerson">
        </bean>
     
    
    private String family;
        
        public String getFamily() {
            return family;
        }
    
        public void setFamily(String family) {
            this.family = family;
        }
    
        public  Person createPerson(){
            System.out.println("通过静态工厂实例化bean!");
            return new Person(family+"");
        }
        
        public  Person createPerson(String name){
            System.out.println("通过静态工厂实例化bean!"+name);
            return new Person(family+":"+name);
        }
        
    
    6.Bean的作用域
    spring3以后默认提供了5种
    (1).singleton(默认值)
    在每个spring ioc容器中一个bean定义只有一个对象实例(共享)
    默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-int='true'来延迟初始化bean,这时候,只有第一次获取bean才会初始化bean.如:
    <bean id="xxxx" class="com.lspring..." lazy-init="true"/>
    如果相对所有的bean都应用延迟初始化,可以在根节点beans设置default-lazy-init="true",如下:《beans default-lazy-init="true"..》
    
    (2).prototype
    允许bean可以被多次实例化(使用一次就创建一个实例 )
    (3).reuqest
    (4).session
    (5).global session(Portlet规范将portlet定义为一种基于java技术的webx组件,由处理请求和生成动动态内容的portlet容器管理")
    
    A.singleton--单例  一个类只有一次初始化,因为第一次加载时就放入内存中去了。。
    
    B.prototype--多例(原型),每次从要从容器取该Bean时,均重新创建一次。
                <constructor-arg value="fff"></constructor-arg>
    C.request--生存期在一次请求内有效,必须在web应用中才能用.
    
    D.session---生存期在一次会话内有效,必须在web应用中才能用.购物车bean.
    
    E.global session,portlet环境应用中才有效
    
    7.指定bean的初始化方法和销毁方法
    <bean id="personDao" class="com.lspring..." init-method="init" destroy-method="close" >
    <property name="timeout" value="10000"></property></bean>
    8.加载多个配置文件
    <bean>
    <import reource="bean-scope.xml"/>
    <import resource="beans-init.xml"/>
    </beans>
    五。Spring ioc容器详解(21.spring容器中的依赖注入概述
    类型:使用构造器注入/使用属性setter方法注入/使用field注入(用于注解方式)
        <!-- 使用setter注入 -->
    public Integer getAge() {
            return age;
        }    
        <bean id="p1" class="com.lspring.springIoc.Person">
        <property name="name" value="TOM"></property>
        <property name="age" value ="18"></property>
        </bean>
        
        <!-- 构造子注入 -->
        public Person(String name, Integer age) {
            super();
            System.out.println("构造子注入!");
            this.name = name;
            this.age = age;
        }
        <bean id="p2" class="com.lspring.springIoc.Person">
        <constructor-arg value="Jerry"></constructor-arg>
        <constructor-arg value="20"> </constructor-arg>
        </bean>
            <!-- 对于 一些有歧义的可能有几个构造函数与下面的参数匹配时,    可以通过指定type进行区分 -->
        <bean id="p3" class="com.lspring.springIoc.Person">
            <constructor-arg index="1" type="java.lang.Integer"
                value="20">
            </constructor-arg>
            <constructor-arg index="0" value="33"></constructor-arg>
        </bean>
    C、字段注入
    需要在配置文件在配置context命名空间,指定容器去扫描Bean中的注解
        private String name;
        private Integer age;
        @Autowired
        private  String Mytel;
    
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        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-3.2.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context-3.2.xsd"
               >
        <!-- 启动注解扫描功能,有的配置是在注解-->
        <context:annotation-config></context:annotation-config>
        <!-- 配置一个字段注入 -->
        <bean id="Mytel" class="java.lang.String">
        <constructor-arg value="11113333"></constructor-arg>
    
    
    2.装配的类型:手动装配还是自动装配
  • 相关阅读:
    js获取宽和高
    弹出一个登录层,并对登录进行校验
    存储过程事务处理
    C# 冒泡算法
    正则表达式30分钟入门教程
    生成树的两种递归方式
    (转)再说ActionMessages类及其用法
    java.io.IOException:stream closed 异常的原因及处理
    log4j学习
    struts1.x的国际化
  • 原文地址:https://www.cnblogs.com/amosli/p/3430575.html
Copyright © 2020-2023  润新知