您的位置:首页 > 编程语言 > Java开发

SpringIoc-DI和IOC以及bean的生命周期

2018-09-02 23:00 387 查看

spring框架对于java开发者来说是一个比较重要的框架,这几天打算系统的学习一下。

spring的核心

ioc、aop、事物管理

spring优点

  1. 方便解耦,简化开发【Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理】
  2. AOP编程的支持【Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能】
  3. 声明式事务的支持【只需要通过配置就可以完成对事务的管理,而无需手动编程】
  4. 方便程序的测试【Spring对Junit4支持,可以通过注解方便的测试Spring程序】
  5. 方便集成各种优秀框架【Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持】
  6. 降低JavaEE API的使用难度【Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低】

下载包说明

spring-framework-3.2.0.RELEASE-dist.zip              ---Spring开发包

  • docs :spring框架api和规范
  •  libs  :spring开发的jar包
  •  schema  :XML的约束文档.

spring-framework-3.0.2.RELEASE-dependencies.zip      ---Spring开发中的依赖包

引入的jar包

  • spring-beans-3.2.0.RELEASE.jar
  • spring-context-3.2.0.RELEASE.jar
  • spring-core-3.2.0.RELEASE.jar
  • spring-expression-3.2.0.RELEASE.jar           
  • 开发的日志记录的包:
  • com.springsource.org.apache.commons.logging-1.1.1.jar        --- 用于整合其他的日志的包(类似Hibernate中slf4j)
  • com.springsource.org.apache.log4j-1.2.15.jar

第一个实例

Helloworld.java

[code]package cn.hfits.spring.demo1;

public class Helloworld {
private String name;
public void sayhello()
{
System.out.println(name+"说:你好.......");
}
//依赖注入需要提供set
public void setName(String name) {
this.name = name;
}

}

测试类

[code]public class TestFunction {
@Test
public void demo1() {
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("applicationContext.xml");
Helloworld obj=(Helloworld) applicationContext.getBean("helloworld");
obj.sayhello();
}
}

applicationContext.xml

[code]<?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">
<!--注入bean-->
<bean id="helloworld" class="cn.hfits.spring.demo1.Helloworld">
<property name="name" value="张三"></property>
</bean>
</beans>

IOC和DI的区别

IOC:控制反转 【将对象的控制权交由spring管理】

DI:依赖注入【在spring创建对象的过程中,将对象依赖的属性注入类中】

一般我是这样记得:ioc相当于上文中的<bean id="helloworld" class="cn.hfits.spring.demo1.Helloworld"/>

di相当于<property name="name" value="张三"></property>

IOC装配bean

  1. 构造方法实例化(默认无参数)
  2. 静态工厂实例化
  3. 实例工厂实例化

1.构造方法实例化【默认的】

[code]<bean id="student" class="cn.hfits.spring.demo2.Student" ></bean>

2.静态工厂实例化

[code]public class StaticFactory {
public static Student getStudent()
{
return new Student();
}
}

xml配置

[code]<bean id="student" class="cn.hfits.spring.demo2.StaticFactory" factory-method="getStudent"></bean>

3.实例工厂实例化

[code]public class StaticFactory {

public  Student getStudent1()
{
return new Student();
}
}

xml配置

[code]<bean id="studentFactory" class="cn.hfits.spring.demo2.StaticFactory"></bean>
<bean id="student"  factory-bean="studentFactory" factory-method="getStudent1"></bean>

bean中的其它配置

id遵守XML约束的id的约束.id约束保证这个属性的值是唯一的,而且必须以字母开始,

name没有这些要求 【如果bean标签上没有配置id,那么name可以作为id.】

scope属性:singleton  单列模式【默认的】 prototype  多例的.   

bean中属性注入【DI】

  1. 构造器注入

  2. set注入【用的最多的】

  3. 接口注入

1.构造器注入

[code]public class Teacher {
private String name;
private int age;
public Teacher(String name,int age)
{
this.name=name;
this.age=age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Teacher [age=" + age + ", name=" + name + "]";
}

}

applicationContext.xml配置

[code]<bean id="teacher" class="cn.hfits.spring.demo3.Teacher">
<constructor-arg index="0" value="马云"></constructor-arg>
<constructor-arg index="1" value="46"></constructor-arg>
</bean>

2.set注入:xml配置如下,另外提供set方法即可

[code]<bean id="teacher" class=""cn.hfits.spring.demo3.Teacher">
<property name="name" value="马云"></property>
<property name="age" value="46"></property>
</bean>

源码:https://download.csdn.net/download/qq_36898006/10659019

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐