当前位置: 首页>编程语言>正文

怎么让spring容器启动后自动运行某个方法 spring 容器

知识体系:

一: Spring框架的简介  

1.什么是Spring?

2.Spring 的主要功能有哪些?

二:  容器和Bean管理   

1.Spring容器的简介

2.Spring 容器的实例化  

3.Spring容器的使用

4.Bean的实例化

5.Bean的命名

6.Bean的作用域

7.Bean的生命周期

8.Bean延迟实例化

9.制定Bean依赖关

 三:容器的IOC应用       

1.ICO概念

2.Setter注入

3.构造器装配

4.自动装配

一:Spring框架的简介

1.什么是Spring?

  1. Spring的核心是一个轻量级(Lightweight)的容器(Container)。
  2. Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架。
  3. Spring提供AOP(Aspect-oriented programming)概念的实现方式。
  4. Spring提供对持久层(Persistence)、事物(Transcation)的支持。
  5. Spring供MVC Web框架的实现,并对一些常用的企业服务API(Application Interface)提供一致的模型封装。
  6. Spring提供了对现存的各种框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案。

2.Spring 的主要功能有哪些?

  二:  容器和Bean管理 

1.Spring容器的简介

  1. 在Spring中,任何的Java类和JavaBean都被当作Bean处理,这些Bean通过容器管理和应用
  2. Spring容器实现了IOC和AOP机制,这些机制可以简化Bean对象创建和Bean对象之间的解耦
  3. Spring容器有BeanFactory和ApplicationContext两种类型

小知识点(JavaBean是一种简单规范的Java对象)

温馨提示:何时使用Spring? 当需要管理JavaBean对象的时候就可以使用Spring,Spring是最简洁的对象管理方案之一

2.Spring 容器的实例化

ApplicationContext继承自BeanFactory接口,拥有更多的企业级的方法,推荐使用它来实例化,方法如下:

//加载文件系统的配置文件实例化
String config="applicationContext.xml所在的路径";
ApplicationContext ac=newFileSystemXmlApplicationContext(config);
//加载工程classpath下的配置文件实例化
String config="applicationContext.xml";
ApplicationContext ctx = 
new ClassPathXmlApplicationContext(config);

温馨提示:如何使用Spring? 遵守Spring定义的规则,基于配置和默认规则,减少代码的书写。

3.Spring 容器的使用

从本质上讲,BeanFactory和ApplicationContext仅仅只是一个维护Bean定义以及相互依赖关系的高级工厂接口而已,通过BeanFactory和
ApplicationContext我们可以访问bean定义。
首先在容器配置文件applicationcontext.xml中添加Bean定义

<bean id="唯一的标识符" class="类所在路径"/>


然后在创建BeanFactory和ApplicationContext容器对象后,调用getBean()方法获取Bean的实例即可
方法使用示例:getBean("唯一的标识符")

4.Bean实例化

Spring容器创建Bean对象的方法有以下3种

-用构造器来实例化

-使用静态工厂方法实例化

-使用实例工厂方法实例化

温馨提示:将对象创建规则告诉Spring,Spring会帮你去创建对象:基于配置和默认规则,减少代码的书写!

下面将分别介绍三种Bean的实例化实例:

用构造器来实例化

<bean id="demo1" class="bean类型" />
<bean name="demo2" class="bean类型" />

id或者name属性指定Bean名称,用于从Spring中查找这个Bean对象,class用于指定Bean类型,会自动调用无参构造器创建对象。

使用静态工厂方法实例化

<bean id="demo3" class="bean类型" factoy-method="Static方法" />

id属性用于指定Bean名称

class属性用于指定工厂类型

factory-method属性用于指定工厂中创建Bean对象的方法,必须用Static修饰的方法

使用实例工厂方法实例化

<bean id="demo4" class="bean类型" />
<bean id="demo5" factory-bean="demo4" factory-method="getTime" />

下面的factory-method和上面的id对应

id用于指定Bean名称

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

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

5.Bean的命名

1.Bean的名称

-在Spring容器中,每个Bean都需要有名字(即标识符),该名字可以用<bean>元素的id和name属性指定

-id属性比name严格,要求具有唯一性,不允许用"/"等特殊字符

2.Bean的别名

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

<alias name="demo6" alias="demo7" />

这两个名字都可以用

6.Bean的生命周期

1.指定初始化回调方法

<bean id="demo8" class="bean类型" init-method="init">
 
    
</bean>

2.指定销毁回调方法,仅使用与singleton模式的bean

<bean id="demo9" class="bean类型" destroy-method="销毁方法名">
</bean>

提示:指定销毁回调方法,仅使用于singleton模式的Bean

并且Spring会管理对象的创建过程

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

<beans  default-init-method="init">
<bean id="demo" class="bean类型"/>
</beans>

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

<beans default-destory-method="destory">
<bean id="demo" class="bean类型">
</beans>

7.Bean延迟实例化

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

2.如果不想让一个singleton bean在ApplicationContext 初始化时被提前实例化,可以使用<bean> 元素的

lazy-init="true"属性改变

3.一个延迟初始化bean将在第一次被用到时实例化

<bean id="demo10" lazy-init="true" class="bean类型"/>

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

8.指定bean依赖关系

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

<bean id="demo11" class="bean类型" depends-on="manager" />
 
    
<bean id="manager" class="ManagerBean">

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

<bean id="demo12" class="bean类型" depends-on="manager1,manager2,manager3">



三:容器的IOC应用

1.IOC概念

1.IOC全称是Inversion of Control,被翻译为控制反转;

2.IOC是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建和注入,

第三方框架一般是通过配置方式指定注入哪一个具体实现,从而降低了对象之间的耦合度

3.IOC按实现方法不同,可以分为依赖注入DI和依赖查找两种

4.Spring容器是采用DI方式实现了IOC控制,IOC是Spring框架的基础和核心。

5.DI全称是Dependency Injection,被翻译为依赖注入;

6.DI的基本原理就是将一起工作具有关系的对象,通过构造方法参数或方法参数传入建立关联,

因此容器的工作就是创建bean时注入那些依赖关系

7.IOC是一种思想,而DI是实现IOC的主要技术和途径

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

Setter注入

通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,

即可实现setter方式的注入

public class JDBCDataSource{
private String driver;
public void setDriver(String driver){
try{//注册数据库驱动
Class.forName(driver);
this.driver=driver;
}catch(Exception e){
throw new RuntimeException(e);
}
}
//其他代码。。。。。
}

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

<bean id="dataSource" class="org.tarena.dao.JDBCDataSource">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="user" value="openlab" />
<property name="pwd" value="open123" />
</bean>

构造器注入

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

public class OracleUserDAO implements UserDAO{
private JDBCDataSource dataSource;
publicOracleUserDAO(JDBCDataSource dataSource){
this.dataSource=dataSource;
}
//其他代码。。。
}

按构造参数索引指定注入

<bean id="dataSource" class="org.tarena.dao.JDBCDataSource">
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="user" value="openlab"/>
<property name="pwd" value="open123"/>
</bean>
<bean id="userDAO" class="org.tarena.dao.OracleUserDAO">
<constructor-argindex="0" ref="dataSource" />
</bean>

2.自动装配

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

2.在xml配置文件中,可以在<bean/>元素中使用autowire属性指定自动装配规则,一共有五种类型值

1.       no:这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。

2.       byName:该选项可以根据bean名称设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。

3.       byType:该选项可以根据bean类型设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的类型自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。

4.       constructor:造器的自动装配和byType模式类似,但是仅仅适用于与有构造器相同参数的bean,如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。

5.       autodetect:该模式自动探测使用构造器自动装配或者byType自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。

配置示例:

<bean id="userDAO" class="org.tarena.dao.OracleUserDAO">
 
   


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

</bean>
<bean id="userService" class="org.tarena.service.UserService" autowire="byType" />

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


https://www.xamrdz.com/lan/5xj1924598.html

相关文章: