Spring学习1 、Spring概述及简单实例(从容器中获取对象(IOC )

1、框架:半成品软件

高度抽取可重用代码的一种设计,高度通用性

 

2、Spring

容器(可管理所有组件)框架

模块划分:

核心关注:IOC AOP

 

核心容器:

spring-beans-4.3.18.RELEASE.jar

spring-context-4.3.18.RELEASE.jar

spring-core-4.3.18.RELEASE.jar

spring-expression-4.3.18.RELEASE.jar

 

IOC:(Inversion Of Control) :控制反转;

控制:资源的获取方式;

 

主动式:(需要什么资源都自己创建,即常规方式)

BookServlet{

BookService bs = new BookService();

AirPlane ap = new AirPlane();

}

被动式:(资源的获取不是我们自己创建,而是交给一个容器来创建和设置

BookServlet{

BookService bs ;

public void test(){

bs.cheskout();

}

}

 

容器:管理所有的组件(有功能的类); 主动new资源 变为被动的接受资源

 

DI:(Dependency Injection) 依赖注入:

容器能知道哪个组件(类)运行的时候,需要另一个组件(类),容器通过反射的 形式,将容器中准备好的对象 注入到需要该对象的另外一个当前对象中 。

 

————————————————————————————————————————————

 

HelloWorld

以前是自己 new对象 ,现在所有对象交给容器创建,给容器注册组件。

 

编写框架 流程

1)、导包

spring-beans-4.3.18.RELEASE.jar

spring-context-4.3.18.RELEASE.jar

spring-core-4.3.18.RELEASE.jar

spring-expression-4.3.18.RELEASE.jar

commons-logging-1.1.1.jar(Spring运行时依赖的一个日志包,没有就报错)

 

2)、写配置

Spring的配置文件中,集合了spring的ioc容器管理的所有组件

创建一个xml配置文件

 

方法一:通过bean的set()方法赋值 (使用property标签赋值)

<!== 为Person类定义一个引用id --> <bean id="person01" class="com.atguigu.bean.Person"> <!-- 使用property标签为person对象的属性赋值 --> <property name="lastName" value="zhangsan"/> <property name="age" value="18"/> <property name="email" value="zhangsan@qq.com"/> <property name="gender" value="m"/> </bean>

 

方法二:通过bean的构造器(即使用构造函数)为容器赋值(使用 construtor-arg)

<bean id="book" class="com.atguigu.spring.bean.Book" >            <constructor-arg value= "10010"/>            <constructor-arg value= "Book01"/>            <constructor-arg value= "Author01"/>            <constructor-arg value= "20.2"/>

 

3)、测试

//创建一个容器 ApplicationContext ioc = new ClassPathXmlApplicationContext("config.xml"); //获取容器中的 Person对象 Person bean =(Person) ioc.getBean("person01"); //使用 person对象 System.out.println(bean); 输出:Person{lastName='zhangsan', age=18, gender='m', email='zhangsan@qq.com'}

 

可以看到,代码中我们并,没有创建person类的实例对象,但是可以输出一个person的信息,这是因为容器帮我们创建了person实例 ,在config.xml配置文件中,我们已经将 一个实例配置好了,所以可以 直接使用。这就是控制反转的 概念。

 

(注:1、对象的创建是在容器刚被创建时创建的,而不是从 容器中获取对象时创建 )

2、同一个组件在 容器中只有一份

3、IOC容器 在创建组件对象 时,会 调用 Person类的 set方法为 java bean属性进行赋值。

 

bean的作用域

在Spring中,可以在<bean>元素的scope属性里设置bean的作用域,以决定这个bean是单实例的还是多实例的。

默认情况下,Spring只为每个在IOC容器里声明的bean创建唯一一个实例,整个IOC容器范围内都能共享该实例:所有后续的getBean()调用和bean引用都将返回这个唯一的bean实例。该作用域被称为singleton,它是所有bean的默认作用域。

当bean的作用域为单例时,Spring会在IOC容器对象创建时就创建bean的对象实例。而当bean的作用域为prototype时,IOC容器在获取bean的实例时创建bean的实例对象。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值