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> 扫描文件