Spring复习(一)之IOC

1、Spring

1、框架;半成品软件;

高度抽取可重用代码的一种设计;高度的通用性;
书城:WebUtils.java;BaseServlet;Filter…
打包:boostore.jar;(工具类)
commons-fileupload,commons-io(工具类),commons-dbutils(方便操作数据库的工具)
框架:抽取成一种高度可重用的;事务控制,强大的servlet,项目中的一些工具。,,,
框架:多个可重用模块的集合,形成一个某个领域的整体解决方案;

2、Spring;

容器(可以管理所有的组件(类))框架;
核心关注:IOC和AOP;

3、Spring(IOC和AOP )

在这里插入图片描述
三个一组:source是源码包;

Spring的模块划分图:
在这里插入图片描述
Test:Spring的单元测试模块;
spring-test-4.0.0.RELEASE
Core Container:核心容器(IOC);黑色代表这部分的功能由哪些jar包组成;要使用这个部分的完整功能,这些jar都需要导入

spring-beans-4.0.0.RELEASE、
spring-core-4.0.0.RELEASE、
spring-context-4.0.0.RELEASE、
spring-expression-4.0.0.RELEASE

AOP+Aspects(面向切面编程模块)

  spring-aop-4.0.0.RELEASE、spring-aop-4.0.0.RELEASE

数据访问/:Spring数据库访问模块

  spring-jdbc-4.0.0.RELEASE、spring-orm(Object Relation Mapping)-4.0.0.RELEASE、
     spring-ox(xml)m-4.0.0.RELEASE、spring-jms-4.0.0.RELEASE、(Intergration)
     spring-tx-4.0.0.RELEASE(事务)

Web:Spring开发web应用的模块;

spring-websocket(新的技术)-4.0.0.RELEASE、
spring-web-4.0.0.RELEASE、和原生的web相关(servlet)
spring-webmvc-4.0.0.RELEASE、开发web项目的(web)
spring-webmvc-portlet-4.0.0.RELEASE(开发web应用的组件集成)

用哪个模块导哪个包(建议);

2 IOC

Spring(IOC+AOP);
在这里插入图片描述

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

  • 控制:资源的获取方式;

    • 主动式:(要什么资源都自己创建即可)
  BookServlet{
  BookService bs = new BookService();
  AirPlane ap = new AirPlane();//复杂对象的创建是比较庞大的工程;
}
  • 被动式:资源的获取不是我们自己创建,而是交给一个容器来创建和设置;
 BookServlet{
 BookService bs;
 public void test01(){
 	bs.checkout();// 
 }
}

容器:管理所有的组件(有功能的类);

假设,BookServlet受容器管理,BookService也受容器管理;容器可以自动的探查出那些组件(类)需要用到另一写组件(类);容器帮我们创建BookService对象,并把BookService对象赋值过去;

容器:主动的new资源变为被动的接受资源;
(容器)婚介所:主动获取变为被动接受;

DI:(Dependency Injection)依赖注入;

容器能知道哪个组件(类)运行的时候,需要另外一个类(组件);容器通过反射的形式,将容器中准备好的BookService对象注入(利用反射给属性赋值)到BookServlet中;

只要IOC容器管理的组件,都能使用容器提供的强大功能;

3 HelloWord

HelloWorld;(通过各种方式给容器中注册对象(注册会员))
以前是自己new 对象,现在所有的对象交给容器创建;给容器中注册组件

以后框架编写流程;

HelloWorld;

1)导包

核心容器

spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
commons-logging-1.1.3.jar
Spring运行的时候依赖一个日志包;没有就报错;

2)写配置
spring的配置文件中,集合了spring的ioc容器管理的所有组件(会员清单);
创建一个Spring Bean Configuration File(Spring的bean配置文件);

<!--注册一个Person对象,spring会自动创建这个person对象-->
    <!--一个Bean标签可以注册一个组件(对象、类)
    一个Bean标签可以注册一个组件(对象,类)
    class:要写注册的组件的全类名
    id 这个对象的唯一标识
    -->

    <bean id="person01" class="cn.tju.bean.Person">
        <!--使用property标签为person对象的属性赋值
        name 为属性名 value为属性值-->
        <property name="name" value="张三"></property>
        <property name="age" value="11" ></property>
        <property name="email" value="@qq.com"></property>
        <property name="gender" value="male"></property>
    </bean>

    <bean id="person02" class="cn.tju.bean.Person">
        <!--使用property标签为person对象的属性赋值
        name 为属性名 value为属性值-->
        <property name="name" value="张三"></property>
        <property name="age" value="11" ></property>
        <property name="email" value="@qq.com"></property>
        <property name="gender" value="male"></property>
    </bean>

3)测试

public class IOStest {
 /**
     * 从容器中拿到这个组件
     */
    @Test
    public void test(){
        //这个接口代表IOC容器,先找到婚介所 相当于应用的上下文
        //当前应用的xml配置文件在ClassPath(类路径)下
        //根据spring的配置文件得到IOC容器 也就是婚介所名单
        ApplicationContext ioc = new ClassPathXmlApplicationContext("IOC.xml");
        System.out.println("容器启动完成");
		
		//容器帮我们已经创建好了对象 取得对象
        Person bean = (Person)ioc.getBean("person01");
	     //拿两次相同的对象
        Person bean2 = (Person)ioc.getBean("person01");
        System.out.println(bean==bean2);//true //也就是同一个对象(组件)在ioc上只有一份
		System.out.println("====================");
        //Person bean3= (Person)ioc.getBean("person03");

        System.out.println(bean);
    }
}

细节

1 创建容器接口的实现类

在这里插入图片描述
new ClassPathXMlApplicationContext(“ioc.xml”);ioc容器的配置文件在类路径下;
FileSystemXmlApplicationContext(“F://ioc.xml”);ioc容器的配置文件在磁盘路径下;

类路径的解释
1)src 源码包开始的路径,称为类路径的开始 因为src是源码包 所有文件都将进入类路径/bin或者/classes 这两者称为类路径
2) 同理resources root 也是类路径 也就是所有源码包的东西都会被合并放在类路径里面
3)web 项目的类路径 /WEB-INF/classes中
在这里插入图片描述

2 注意先导包在创建配置文件
3 给容器中注册一个组件,我们也从容器中按照id 拿到了这个组件的对象?

组件的创建工作,是容器完成的

4 person对象是什么时候创建好的?

在容器创建的时候就好了,容器只要一启动,容器中所注册的所有对象都将创建好
ApplicationContext ioc = new ClassPathXmlApplicationContext(“IOC.xml”);

5 同一个组件在IOC容器中是单实例的,容器启动完成都已经创建好了
6 容器中没有这个组件获取组件?报异常org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘person03’ is defined
7 容器中标签是怎么赋值的呢?

IOC容器在创建这个组件对象的时候,会利用setter方法为javaBean的属性进行赋值

8 javaBean的属性名是由什么决定的?

getter/setter方法是属性名;set去掉后面那一串字母小写就是属性名;
并不是由类的成员变量private String Name;决定的
因此所有getter/setter都自动生成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值