Spring IOC详解

Spring框架

  1. 框架作用

指的是实现软件开发的基础软件产品,不同框架在软件开发的各个模块中起到到简化开发作用。列如:spring负责解耦,struts2,mvc层分离,hibernate负责持久化。

学习的目的:简化开发

  1. spring框架介绍

Spring是最受欢迎的企业级java应用开发框架,数以百万的来自世界的开发人员使用spring框架来创建性能好,易于测试,可重用的代码。Spring框架是一个开源的Java平台,最初是由rod Johnson编写,spring是轻量级的框架,spring框架的核心特性是可以用于开发任何的Java应用程序,但在Java EE平台构建web应用程序是需要扩展的,spring框架的目的是java EE开发更加容易,通过启用pojo编程模型来促进良好的编程实践。

  1. spring的体系结构

Spring最核心的是IOC容器和AOP编程,其他模块是可选模块,且是在IOC容器基础之上的。Spring为企业提供一站式服务。

  1. 为什么使用spring

Spring IOC容器可以实现代码的解耦,基本思路就是实现一个功能强大的BeanFactory工厂,同时可以缓存各种bean对象,需要某个特定的bean从实例从IOC中获取

 

Java POJO Classes

 

z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JavaBean:javaEE下的一个技术规范

JavaBean:泛指一切java类型DaoImpl ServiceImpl (或叫组件)

IOC容器:控制反转,指当前类交出控制权,交给容器,我们需要某个对象通过容器获得,而不是自己创建

  1. 如何获取spring框架

获得代码:http://repo.spring.io/release/org/springframework/spring/版本: 最新的版本 5.1.4.RELEASE

xxx-dist 包含所需的jar包和源

6.安装spring for Eclipse插件

安装插件的目的,获取更多的模板和提示

7.spring入门案例

 

使用spring IOC容器

  1. 创建工程
  2. 导入相关jar包

注意:添加到编译路劲

  1. 编写POJO类

package com.bjlemon.pojo;

public class Student {

public void sayHello() {

System.out.println("大家好,我是张家辉");

}

}

  1. 编写spring的配置文件

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

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

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.xsd">

<!-- 注册一个<u>Studnet</u>对象到IOC容器中

id: 对象名

class: 指定对象的类型 ,取值为类全名,作用是框架根据类全名进行反射 创建对象

相当于:Student st = new Student()

-->

<bean id="st" class="com.bjlemon.pojo.Student" > </bean>

</beans>

  1. 测试

package test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bjlemon.pojo.Student;

Public class springTest{

Public static void main(string[] args){

//原始方式

//student st= new student();

//spring反式

  1. 创建IOC容器

ApplicationContext ioc = new ClassPathXmlApplicationContext(application.xml);

Student st = (student) ioc.getBean(st);

}

}

  1. 创建Bean的方式

JavaBean:是JavaEE的一个技术规范,是企业应用中组件抽象,通常实体类pojo,业务层,持久层,工具。都称为JavaBean。

Spring框架就是来管理各种各样的bean,spring IOC容器来管理bean的实现

Spring的创建方式:

  1. 基于构造器创建

构造器创建

< bean name=dl class=com.bjlemon.pojo.Dog/>

底层:

String className=“com.bjlemon.pojo.Dog;

Class class=Class.forName(className);

Object d=class.newInstance();

  1. 静态工厂方法创建

<bean name=d2,d3 class=om.bjlemon.pojo.DogFactory factory-method=getDog/>

  1. 工厂实例方法 创建
  1. 创建工厂

<bean name=factory class=om.bjlemon.pojo.DogFactory/>

  1. 调用工厂方法

<bean name=d4 factory-bean=factory factory-method=getDogInstance/>

  1. Bean的生命周期

Bean的生命周期,指的是bean创建,初始化,销毁的各个阶段。

如何获取生命周期中的各个阶段,需要对生命周期进行监听

  1. 创建,通过构造器可获得。
  2. 初始化,init-method=“自己的监听方法”。
  3. 销毁,destroy-method=“自己的监听方法

<bean name=mydog class=om.bjlemon.pojo.Dog init-method=init destory-method=destory/>

全局配置:

<bean default-init-method=init destoty-method=destory/>

  1. Bean作用域

作业域指bean的有效范围

<bean name=dog class=om.bjlemon.pojo.Dog scope=prototype/>

scope的取值:

  1. prototype:原型模式,每一次都创建一个新的。
  2. Singleton:单列模式:第一次创建,然后被缓存,以后都返回这一个相同的对象。
  3. Request
  4. Session

Scope默认singleton

  1. Bean的懒加载

懒加载也叫延迟加载,只有使用时才去加载

<bean name=dog class=om.bjlemon.pojo.Dog scope=singleton lazy-init=true/>

lazy-init的取值:

True:表示启动懒加载

False:表示不要懒加载

Default:默认是false

全局配置<bean ...default-lazy-init=true/>

  1. 依赖注入
  1. Set注入:调用set方法注入

<bean name="p1" class="com.bjlemon.pojo.Person">

<!-- 为属性赋值 -->

<property name="name" value="王思聪">

</property>

<property name="age">

<value>40</value>

</property>

<property name="car" ref="myCar"/>

<!--

说明: name 属性名字,但是底层会根据属性名推测 set方法,推测原理: set + 属性首字母

大写 - setName setAge

value: 属性的值: 支持 8大基本数据类型 和String类型

ref : 属性引用值: 引用类型属性赋值

-->

</bean>

<bean name="myCar" class="com.bjlemon.pojo.Car">

<property name="brand" value="奥迪"/>

<property name="name" value="A6L"/>

<property name="price" value="300000.33"/>

</bean>

  1. 构造器注入:调用构造器注入

<bean name="yourCar" class="com.bjlemon.pojo.Car">

<constructor-arg name="name" value="X6"/>

<constructor-arg name="brand" value="宝马"/>

<constructor-arg name="price" value="500000"/>

</bean>

  1. 集合注入

<bean name="p3" class="com.bjlemon.pojo.Person">

<property name="name" value="刘德华" />

<property name="age" value="55" />

<property name="car" ref="myCar" />

<!-- List 注入 -->

<property name="list">

<list>

<value> 苹果 </value>

<value> 900 </value>

<ref bean="yourCar" />

<!--内部 匿名bean-->

<bean class="com.bjlemon.pojo.Car">

<constructor-arg index="1" value="吉利" />

<constructor-arg index="0" value="博瑞" />

<constructor-arg index="2" value="120000" />

</bean>

</list>

</property>

<!-- set集合注入 -->

<property name="sets">

<set>

<value>电视</value>

<value>手机</value>

<ref bean="p1"/>

</set>

</property>

  1. 自动注入

无需手动注入依赖,注入过程交给IOC容器,但是我们需要开启自动开关,同时指定注入方式。

<bean name="car" class="com.bjlemon.pojo.Car" >

<property name=" brand" value="奥迪" />

<property name="name" value="A6L" />

<property name="price" value="300000.33" />

</bean>

<bean name="yourCar" class="com.bjlemon.pojo.Car" >

<constructor-arg name="name" value="X6" />

<constructor-arg name="brand" value="宝马" />

<constructor-arg name="price" value="500000" />

</bean>

<bean name="heCar" class="com.bjlemon.pojo.Car" >

<constructor-arg index="1" value="吉利" />

<constructor-arg index="0" value="博瑞" />

<constructor-arg index="2" value="120000" />

</bean>

autowire=byName 通过属性名字从IOC容器中选择同名的bean注入

<bean name=pp class=com.bjlemon.pojo.Person autowire=byName></bean>

Autowire=byType 更具属性类型从IOC容器选择同类型的bean注入

<bean name=pp class=com.bjlemon.pojo.Person autowire=byType></bean>

根据属性类型时可能出现异常,可能找到多个满足条件的bean。这时可以设置其他的bean为非候选bean autowire=candidate=false

autowire=constructor根据构造器参数类型注入,但是会优先考虑名字。

Autowire=no 不注入

Autowire=default默认注入方式:no

  1. 注解配置
  1. 引入名字空间

 

<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-4.3.xsd">

  1. 开启组件扫描

<content:component-scan base-package=com.bjlemon.pojo/>

  1. 在需要注入到IOC容器中的Bean头上添加注解

@Component("cc")

public class Car {

.....

}

@Component标记此类为一个组件

Spring在扫描时,发现此类为组件,就会把他注入到IOC容器。注入后的bean的名字为类名的首字母小写的单词作为bean的名字。如果,需要自定义名字。测@component(“beanName”)

Component是一个Bean组件通用注解,此组件没有业务上的含义,但是在实际开发中,组件来自各个领域。

比如:控制器contrller,Service,Dao,为了更加明确体现各层组件,spring提供更加细化的注解。

业务层:@Service

控制层:@Controller

持久层:@Repository

@Autowire(required=true):自动注入依赖,注入类型是byType,默认是required=true,表示必须注入一个,否则报错。

@Qualifier(“beanName”):和@Autowire连用,变成根据名字注入。

@Resource(name=“beanName”)根据名字注入。名字注入不成功再按类型,不是spring提供,JSR规范。

@Value:注入属性,基本数据类型&String

@Configuration:基于Java配置的注解,表示该类是一个配置类,类似xml的作用。

@Bean:表示一个java bean,能够注册到IOC容器中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值