`

1、spring-ioc(Inversion of Control)

    博客分类:
  • mvc
 
阅读更多
Ioc实现对象实例化,不采用new  Class的方式,这就是控制反转:由容器(spring)完成对象的实例化过程。

在使用bean之前,要在beans.xml文件中配置好各个bean的属性,并建立bean与bean之间的关系;可以使用多个类似beans.xml的配置文件。

BeanFactory使得IOC管理不同类型的对象成为可能,ApplicationContext在BeanFactory的基础上提供实用功能,一般称BeanFactory为IoC,采用java的反射和代理机制。

IoC的初始化

BeanFactory的初始化类:XmlBeanFactory该类已过时

ApplicationContext的初始化类:1.优先使用  ClassPathXmlApplicationContext     (xml放在src目录下) 

                                                           同时启动几个beans.xml文件:new ClassPathXmlApplicationContext(new String[]{"conf/beans1.xml","conf/beans2.xml"});    

                                                          2.使用 FileSystemXmlApplicationContext   (支持相对路径和绝对路径)

                                                          3.WebApplicationContext(使用较少)

获取beans.xml文件后,使用getBean(”id“)就可以返回对象实例了,在这个获取文件份过程中,IOC会实例化所用单例id对象,所以在第一次读取beans.xml文件时会花费相对多点的时间,而后访问就不会花费额外的时间了。



简单的实例:<bean id = "user" class ="org.nick.demo.User"/> 这是没有给对象属性赋值的简单实例化。

在beans.xml中id是唯一的,而使用name可以是多个,返回的实例是最后声明的那个bean,不建议使用name代替id;

可以为同一个对象配置几个name,如<bean name="name1,name2,name3" class="org.nick.demo.User"/>

如果是<bean class="org.nick.demo.User"/>这样没有指定id和name,则要使用getBean("org.nick.demo.User")全域来获取,这种属于匿名对象。

如果出现多个同类的匿名对象,使用getBean("org.nick.demo.User");getBean("org.nick.demo.User#1");getBean("org.nick.demo.User#2")来获取;


基于xml配置;

属性注入:

实例化对象过程中采用set方法和构造方法对属性进行赋值,ioc的配置方法也不一样:

setter: <propertyname="userName"value="张飞"></property>

constructor:<constructor-arg type="java.lang.String" value="张飞"></constructor-arg>

注意:参数的类型和位置,最好指明参数的位置:<constructor-arg type="java.lang.String"  index="0" value="张飞"></constructor-arg>

            当两个对象的构造方法中互含对方作为参数(ref=""),就会造成ioc不能启动,就必须使用set方式注入;
属性注入详解

1、字面值   

如  <value>张飞</value>

      <value><![CDATA[张飞2*3=89]]>引入cdata是让xml解析器将[]内的字符串当做普通的字符串,以防止不能正常解析。

2、引用其他bean

如<ref bean="user"/> 可以引用本xml文件和父xml中的bean

    <ref local="user"/>只可以引用本xml文件中的bean

    <ref parent="user"/>只能引用父xml中的id="user"的bean

   设定父xml:

   ClassPathXmlApplicationContext  parentXml = new ClassPathXmlApplicationContext ("conf/beans1.xml");

   ClassPathXmlApplicationContext  sonXml= new ClassPathXmlApplicationContext ("conf/beans2.xml",parentXml);

将文件地址和父对象放在构造器里的;
3、List集合,对String[],int[]数组同样适用

<property name="list">

<list>
           <value>刘备</value>                                         &&   <ref bean=”user1“/>
           <value>关羽</value>                                         &&   <ref bean=”user2“/>  
           <value>张飞</value>                                         &&   <ref bean=”user3“/>  
</list>
</property>

4、Map集合
<property name="maps">
<map>
         <entry>
          <key><value>org1</value> </key>                                        &&   <key><ref bean="name"/></key>  
           <value>微软</value>                                                              &&   <ref bean=”org“/>  
         </entry>
         <entry>
          <key><value>org2</value> </key>                                      
           <value>google</value>                                        
         </entry>
</map>
</property>

util标签
xmlns:util="http://www.springframework.org/schema/util"
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd"
1、List
<util:list id="favoriteList1" list-class="java.util.LinkedList">
<value>看报</value>
<value>赛车</value>
<value>高尔夫</value>
</util:list>
2、Set
<util:set id="favoriteSet1"  >
<value>看报</value>
<value>赛车</value>
<value>高尔夫</value>
</util:set>
3、Map
<util:map id="emails1" >
<entry key="AM" value="会见客户" />
<entry key="PM" value="公司内部会议" />
</util:map>
以上都可以适用<ref bean   >标签

p标签
xmlns:p="http://www.springframework.org/schema/p"
如:<bean id="user" class="org.nick.demo.User"    p:userName="skx" p:age="28" p:sex="male"/>
引用: p:organize_ref=”sx“

***基于注解配置,实际开发中常用,放在class的上一行
@Component       通用
@Repository      用于model
@Service         用于dao,用的较少
@Controller      用于springMVC

推荐使用特定用途的注解
使注解生效,添加context标签:
xmlns:context="http://www.springframework.org/schema/context"
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd

<context:component-scan base-package="org.nick.dao"/>   扫描包下的所有类,使得spring注解生效

1、只希望扫描特定的包:
<context:component-scan base-package="org.nick" resource-pattern="action/*.class"/ >
2、包含目标类和排除目标类,p56
<include-filter....
<exclude-filter...
&注解:自动装配
通过@Autowired注解实现bean的注入,在Bean的配置信息中匹配查找bean,仅但有一个bean匹配时,才将其注入到@Autowired标注的变量中。
这里的匹配不是按照id名匹对的,而是按照匿名类匹对的。

注:如果这个Bean配置信息中没用一个匹配的bean,Ioc容器会抛出一个NoSuchBeanDefinitionException,可以使用:
@AutoWired(required=false) 表示没有找到也不抛出异常的处理方式
注:如果IoC容器中有多个匹配的bean(有多个同类型的对象),就需要使用name名匹对:
如:@Autowired
         @Qualifier("name")
自动装配不仅对变量进行标注也可对方法进行标注:
对方法进行标注 是将bean作为参数供方法使用:入参
如:@Autowired
         public   calculate (User skx){}               //就会将User的匿名对象入参
也可使用Qualifier指定一个bean
如:@Autowired
         @Qualifier("skx")
         public   calculate (User skx){}               //就会将skx的bean入参
或者
        @Autowired
        public   calculate (@Qualifier("skx")User skx){}               //就会将skx的bean入参
注:在配置Bean配置信息时,大多时候类型是单实例的,所以一般不会使用@Repository、@Service、@Qualifier

前面讲了xml对beans的配置,也可以在一个java类中进行Bean配置:@Configuration(用的较少)
  • 大小: 16.6 KB
分享到:
评论

相关推荐

    spring-struts1-strust2-hibernate 核心包介绍

    这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行 Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC /DI支持,引入spring-core.jar及...

    00-myspring-ioc.war

    手写spring ioc(Inversion of Control控制反转,也称依赖倒置(反转))代码的实现

    spring-beans-4.0.0.RELEASE.jar

    spring-beans-4.0.0.RELEASE.jar这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI...

    SpringSecurity.zip

    它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...

    spring-security-4.2.5.RELEASE-source.zip

    它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...

    spring jar 包详解

    (2) spring-beans.jar 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,...

    springioc和spring aop

    控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    如果你的应用仅仅用到简单的Inversion of Control / Dependency Injection(IoC/DI)容器,那么只需spring-core.jar与spring-beans.jar即可;如果你对发布的大小要求很高,那么就得精挑细选了,只取包含自己所需特性...

    IoC_Spring.rar_inversion_spring

    Inversion of control with Spring

    spring jar包

    3.spring-beans:基础jar包,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring...

    spring4.3.9相关jar包

    spring-beans.jar(必须):这 个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI ...

    spring框架约束步骤及教程

    spring-beans.jar 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入...

    xmljava系统源码-ioc:Thejavaiocframework(从零开始手写模拟springIoc框架)

    Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)。 通过控制反转,对象在被创建的时候,由一个调控...

    Spring的IOC容器

    揭秘Spring的IOC容器 IoC是随着近年来轻量级容器(Lightweight Container)的兴起而逐渐被很多人...的全称为Inversion of Control,中文通常翻译为“控制反转”,它还有一个别名叫做依赖注入(Dependency Injection)。

    Spring Security、Spring Social 、Spring Security OAuth

    它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...

    Spring——IOC(控制反转)与DI(依赖注入).docx

    控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法 。在没有IOC的程序中,我们使用面向对象编程,对象的创建于对象间的依赖完全硬编码在程序中,对象的创建有程序自己控制;...

    Pro Spring 3

    What Inversion of Control (IoC) and dependency injection (DI) are Aspect-oriented programming techniques with Spring, and why they’re important Data access and persistence using Spring and Hibernate,...

    Spring 框架的IoC

    控制反转(IoC = Inversion of Control)

    登陆案例jar包

    //包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。 spring-core-4.2.4.RELEASE.jar //这个jar 文件包含Spring 框架基本的核心工具类。Spring ...

    spring ioc aop 源码阅读pdf

    首先想说说IoC(Inversion of Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何...

Global site tag (gtag.js) - Google Analytics