Spring核心一(基本概念)

来源:互联网 发布:南风知我意琰阙百度云 编辑:程序博客网 时间:2024/06/07 13:39

1.Spring提供IOC和AOP应用,将组件的耦合度降至最低,即解耦。

 

2.spring本质是管理软件中的对象,如何创建对象和维护对象之间的关系

 

3.任何的java类和javabean都被当成bean处理,这些bean通过容器管理和应用

 

4.Spring容器有BeanFactory和ApplicationContext两种类型

 

5.BeanFactory和ApplicationContext仅仅只是一个维护Bean定义以及相互依赖关系的高级工厂接口。通过BeanFactory和ApplicationContext可以访问Bean定义

 

6.容器使用

step1: 首先在容器配置文件applicationContext.xml中添加Bean定义

         <beanid=”标识符” class=”bean类型” />

step2: 在创建BeanFactory和ApplicationContext容器对象后,调用getBean()方法获取Bean的实例即可

         getBean(“标识符”)

 

7.Bean的实例化

step1: 用构造器来实例化

 

         <beanid=”calendarObj1” class=”java.util.GregorianCalendar” />

         <beanname=”calendarObj2” class=”java.util.GregorianCalendar” />

ps:

         id/name属性用于指定Bean的名称,用于从spring中查找这个bean对象

         class用于指定Bean类型,会自动调用无参数构造器创建对象  //使用无参构造方法创建对象

 

step2: 使用静态工厂实例化

        

<bean id=”calendarObj2”class=”java.util.Calendar” factory-method=”getInstance” />

ps:

id属性用于指定Bean的名称,//创建对象的变量名

         class属性用于指定工厂类型,//用于创建对象的类名

         factory-method属性用于指定工厂中创建Bean对象的方法,必须用static修饰 //调用类中的静态方法

 

step3: 使用实例工厂实例化

 

         <beanid=”calendarObj3” class=”java.util.GregorianCalendar” />

         <beanid=”dateObj” factory-bean=”calendarObj3” factory-method=”getTime” />

ps:

         id用于指定Bean的名称

         factory-bean属性用于指定工厂Bean对象

         factory-method属性用于指定工厂中创建Bean对象的方法

 

8.为已定义好的Bean再增加另外一个名字引用,可以使用<alias>定义

         <aliasname=”fromName” alias=”toNmae” />

 

9.Bean的作用域

step1: singleton  在每个Spring IoC容器中对应一个对象实例,默认项

step2: protoype 一个bean定义对应多个对象实例

step3: request 在一次http请求中,一个Bean定义对应一个实例,仅限于web环境中

step4: session 在一个httpsession中,一个bean定义对应一个实例,仅限于web环境

step5: global Session 在一个全局HTTP Session中,一个bean定义对应一个实例:仅在基于protlet的web应用中才有意义,Portlet规范定义了全局Session的概念

 

ps:

         上面指定的作用域,可以通过<bean>定义的scope属性指定

 

10.Bean的生命周期回调

step1: 指定初始化回调方法

         <beanid=”exampleBean” class=”com.foo.ExampleBean” init-method=”init” />

step2: 指定销毁回调方法,仅适用于sington模式的bean

         <beanid=”exampleBean” class=”com.foo.ExampleBean” destory-method=”destroy” />

step3: 在顶级<beans/>元素中的default-init-method属性,可以为容器所有<bean>指定初始化回调方法

         <beansdefault-init-method=”init”>

                   <beanid=”exampleBean” class=”com.foo.ExampleBean” />

         </beans>

step4: 在顶级<beans/>元素中的default-destroy-method属性,可以为容器所有<bean>指定销毁回调方法

         <beansdefault-destroy-method=”init”>

                   <beanid=”exampleBean” class=”com.foo.ExampleBean” />

         </beans>

 

11.Bean延迟实例化

step1: 在ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化

step2: 如果不想让一个singleton bean在ApplicationContext初始化时被提前实例化,可以使用<bean>元素的lazy-init=“true”属性改变

         <beanid=”exampleBean” lazy-init=”true” class=”com.foo.ExampleBean” />

step3: 在顶级<beans/>元素中的default-lazy-init属性,可以为容器所有的<bean>指定延迟实例化特性

 

12.指定bean依赖关系

step1: 当一个bean对另一个bean存在依赖关系时,可以利用<bean>元素的depends-on属性指定

         <beanid=”beanOne” class=”ExampleBean” depends-on=”manager” />

         <beanid=”manager” class=”ManagerBean” />

step2: 当一个bean对多个bean存在依赖关系时,depends-on属性可以指定多个bean名,用逗号隔开

         <beanid=”beanOne” class=”ExampleBean” depends-on=”manager1, manager2” />

 

12.IoC概念

step1: DI全称是DependencyInjection,被译为依赖注入

step2: DI的基本原理就是将一起工作具有关系的对象,通过构造的方法参数或方法参数传入建立关联,因此容器的工作就是创建bean时注入那些依赖关系

step3: DI主要有两种注入方式,即Setter注入和构造器注入

 

13.通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,可实现setter方式注入

         publicclass JDBCDataSource{

                   privateString driver;

public void setDriver(String driver){

         try{

Class.forName(driver);

this.driver = driver;

         }catch(Exception e){

         throw newRuntimeException(e);

}

}

//其他代码…..

}

 

在容器xml配置中,配置注入参数

         <beanid=”dataSource” class=”org.tarena.dao.JDBCDataSource”>

                   <propertyname=”driver” value=”oracle.jdbc.OracleDriver” />

                   <propertyname=”url” value=”jdbc:oracle:thin:@localhost:1521:XE” />

                   <propertyname=”user” value=”openlab” />

                   <propertyname=”pwd” value=”open123” />

         bean/>

 

14.构造器注入:通过调用带参数的构造器来实现的,容器在bean被实例化的时候,根据参数类型执行相应的构造器

         publicclass OracleUserDAO implements UserDAO{

                   privateJDBCDataSource dataSource;

                   publicOracleUserDAO(JDBCDataSource dataSource){

         this.dataSource =dataSource;

}

}

         按构造参数索引指定注入

                   <beanid=”dataSpurce” class=”org.tarena.dao.JDBCDataSource”>

                            <propertyname=”driver” value=”oracle.jdbc.OracleDriver” />

                            <propertyname=”url” value=”jdbc:oracle:thin:@localhost:1521:XE” />

                            <propertyname=”user” value=”openlab” />

                            <propertyname=”pwd” value=”open123” />

                   </bean>

                   <baeanid=”userDAO” class=”org.tarena.dao.OracleUserDAO”>

                            <constructor-argindex=”0” ref=”dataSource” />

                   </bean>

 

15.自动装配

step1:Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,,autowire可以针对单个bean进行设置,autowire的方便之处在于减少xml的注入配置

step2: xml中有5种类性值

         no禁用自动装配,默认值

         byName根据属性名自动装配,此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配

byType 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配

         constructor与byType的方式类似,不同之处在于它应用于构造器参数

         autodetect通过bean类来决定是使用construtor还是byTpe方式进行自动装配。如果发现默认构造器,那么将使用byType方式

 

         <beanid=”userDAO” class=”org.tar.dao.OracleUserDAO”>

                   <constructor-argindex=”0” ref=”dataSource” />

         </bean>

         <beanid=”userService” class=”org.tarena.service.UserService” autowire=”byType” />

 

ps:

         上述配置,在UserService中如果存在接收UserDAO类型的方法Setter方法,Spring就可以自动将userDAO对象注入进去

原创粉丝点击