夜光带你走进Spring(二)

时间:2019-04-15
本文章向大家介绍夜光带你走进Spring(二),主要包括夜光带你走进Spring(二)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

夜光序言:

 

夜好长,

可又该如何面对明天呢?

 

正文:

2. Spring IOC 容器

创建bean细节:

1) bean在容器中的写法

2) bean声明周期

 

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="

        http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context.xsd">

 

<~-- 把对象加入IOC容器 -->

 

<~--

细节1:

id 与   name:

id 不能以数字开头,不能含有特殊符号, 不能有空格、逗号等;  id 不能重复~

name 可以以数字开头,可以有特殊符合,如果name值重复,编译没有问题但运行报错~

 

<bean id="user" name="user2,user3 user4" class="cn.Genius.a_config.User"></bean>

<bean name="user5" class="cn.Genius.a_config.User"></bean>

<bean id="user6" class="cn.Genius.a_config.User"></bean>

<bean id="user6" class="cn.Genius.a_config.User"></bean>

-->

 

<~-- 细节2: (单例/多例)  -->

<~--

scope="singleton"   默认表示单例~

       prototype    多例

init-method=""      在创建完对象之后执行初始化方法

destroy-method=""   在调用容器类的destroy()方法时候,对单例的对象有效~

lazy-init="true"    延迟初始化 / 这个属性的设置只对单例有影响,对多例没有任何影响~

单例的对象默认是在创建容器的时候就创建所有单例的对象,如果希望在第一次访问的时候创建单例的对象,就设置延迟初始化

Bean生命周期:

   bean在xml中配置,

      singleton  单例

       1) 创建对象

        如果有配置延迟初始化,

         lazy-init=true  如果单例的对象有配置延迟初始化, 在创建容器之后,在第一次从容器获取对象的时候

          创建单例的对象~

       如果没有配置或延迟初始化为默认值, 单例的对象会在创建容器的时候创建对象

    2) 执行初始化方法 , init-method配置的方法会执行

    3) 调用容器destroy() 方法时候,容器在销毁单例对象的实例的时候,会调用destroy-method对应的方法

       此时bean对象会被销毁~

      

      prototype  多例

        1) 每次在从容器获取对象的时候,都会创建新的对象

        2) 每次创建完对象后,就执行初始化方法

     3) java回回收不用资源(jvm gc)

 -->

<bean id="user" 

class="cn.Genius.a_config.User" 

init-method="init" 

destroy-method="destroy_" 

lazy-init="false" 

scope="prototype"></bean>

 

</beans>       

 

 

创建对象的几种方式

 

创建对象的几种方式:

1) 调用无参数构造器

2) 调用有参数构造器

3) 工厂

* 静态方法

<bean id=”’  class=””  factory-method=””/>

* 非静态方法

<bean id=”factory”  class=”..”>

<bean id=””  factory-bean=” factory”   factory-method=”实例方法” />

4)  反射

 

 

 

 

 处理对象的依赖关系

给对象属性赋值(DI, 依赖注入),几种方式:

 1) 构造函数赋值

 2) set 方法注入值

* 普通字段赋值

* 集合属性 (list/map/property)

3) 案例

Dao/service/action实例,处理依赖关系

* 常用的通过set方法注入

* 内部bean

* p 名称空间

* 自动装配

* 注解

 

 

 

夜光:注解总结

@Component  表示一个组件(类),把当前组件加入ioc容器

 加入容器的组件的名称默认是类名第一个字母小写

@Component(“”)   指定加入ioc容器的组件类的类名

 

@Repository    标识是一个持久层的组件

@Service       标识是一个业务逻辑层的组件

@Controller     标识是一个控制层的组件

 

@Scope("prototype") 指定对象单例/多例

@Resource     

1. 默认根据修饰的字段名称会取ioc容器找对象自动注入

找到后注入

 

 2. 如果名称没有找到,再根据类型查找  找到后就立刻注入

 

     如果改类型在ioc容器中有多个对象,报错~

  

3. 根据类型也没有找到对象,报错~

 

@Resource(name =””) 会根据指定的名称去容器找对象自动注入

 

配置方式与注解方式:

1. 配置, 便于维护

(配置过多,比较繁琐)

2. 注解, 开发方便

(简化配置,不利于后期维护,如果修改对象创建、关系处理,需要改代码~)

 

 

3. Spring 与Struts整合

Spring与struts整合,关键点:

把action的创建,交给spring的ioc容器~

所以,需要引入jar文件:【我们开发中需要各种各样的jar包,可以去中央仓库进行索取~~】

struts2-spring-plugin-2.3.4.1.jar 【struts源码】

spring-web-3.2.5.RELEASE.jar 【spring源码】

 

整合完整步骤:

1.  引入jar

Struts核心jar

Spring

Core  核心       (5个)

Web  对web支持 (2个)

2. 配置

bean.xml

struts.xml

web.xml

struts2核心过滤器

启动时候,配置加载springIOC容器

 

3. Action 类

 

 

 

夜光任务:

1. 写简单案例,练习spring 、

* 搭建spring环境

* 测试OK

* dao/service/action

然后处理对象依赖关系,

* set方法注入值, 几种方式

* 注解

2. spring与struts整合,小案例

3. 优化前面项目,

融入spring功能~,进行整合开发