IOC

1.IOC 控制反转

IOC容器导入jar包:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>

BeanFactory核心类

FileSystemXmlApplicationContext

ClassPathXmlApplicationContext

从类的关系可以看出 BeanFactory 容器的顶级对象是 BeanFactory

BeanFactory bean1 = new FileSystemXmlApplicationContext();

BeanFactory bean2 = new ClassPathXmlApplicationContext();

我们要创建一个IOC容器 必须依赖一个XML文件 applicationcontext.xml

 

为什么要把类以bean的方式配置到IXml中

id 唯一标识

class 类路径

scope   singleton 单例(默认的)  prototype 多例

<bean id="" class="类路径">

  1.首先 我们的目标是让IOC容器来帮助我们实例化类

  2.类是我们自己编写的,与IOC容器没有任何的关联

  3.我们希望让IOC容器来帮助我们构建单例的对象  并且在不改变类的结构模式上

  4.我们平时构造单例 必须得使用单例模式

 

DI 依赖注入   IOC容器帮我们再构造对象的同时 也把依赖关系也一起注入

注入的前提是该属性有set方法 

 

 

目的  当我们实例化Controller的时候

  会自动实例化 并且默认都是单例

    Controller

    Service

    Dao

  建立依赖关系

<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/rbac"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>

<bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
<constructor-arg index="0" ref="c3p0"></constructor-arg>
</bean>
<bean id="userDao" class="com.blb.dao.UserDao">
<property name="runner" ref="queryRunner"></property>
</bean>

<bean id="userService" class="com.blb.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>

<bean id="userController" class="com.blb.controller.UserController">
<property name="userService" ref="userService"></property>
</bean>

2.5的时候 出了新特性 自动装配

根据类型和名称自动装配

3.0之后 JDK1.6 新特性 注解 程序员全部解放 全部用注解

Spring发明了四大注解

  @service  用来标注在业务层 只要标注了该注解的类 会自动加入到IOC容器中

  @Controller  用来标注在控制层

  @Repository   用来标注吃持久层

  @Component  其他都用这个标注

 

自己写的类 可以使用注解加入到IOC容器中

jar包里面的类 只能用最原始的方式加入到IOC容器中

最终的目的:单例的对象

 

@Autowired  bytype

@Resource  byname 

不用配置文件  需要启用注解

xml文件中添加

<context:annotation-config></context:annotation-config>  启用

<context:component-scan base-package="com.blb"></context:component-scan> 扫描文件

 

posted @ 2020-02-05 20:40  Tsugar  阅读(186)  评论(0编辑  收藏  举报