概念
介绍
Spring
框架是一个
开放源代码
的
J2EE
应用程序框架,
由
Rod Johnson
发起,
是针对
bean
的生命周期进
行管理的轻量级容器
(
lightweight container
)。
功能
Spring
是一个开源容器框架,它集成各类型的工具,通过核心的
Bean
factory
实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的 Bean
,这样就可以实现各种功能的管理,包括动态加载和切面编程。
优点
一站式
- 使用Spring框架就可以实现应用开发中的各种,如创建实例、jdbc、资源跳转等;
轻量级
- 应用体积小
- 应用耦合度降低
搭建必备
- spring core : spring核心包;
- spring context:指的是spring容器包;
- spring beans: 相当于 java中的bean;
- spring expression (spel) : spring表达式语言;
- spring jcl 对日志的支持;
IOC
概念
- 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度;
- spring提供的一种容器;
功能
控制反转—解决代码耦合度偏高问题:对象的创建控制权由程序转移到外部,由外部来提供对象。
作用
- 控制反转简单来说就是将程序员new对象的操作,交给spring容器进行创建、管理;
- IoC容器:负责对象的创建、初始化工作,被创建或被管理的对象在IoC容器中称为Bean。用来充当IoC思想中的外部
入门
ClassPathXmlApplicationContext
:类路径
src
下面
FileSystemXmlApplicationContext
:文件系统路径
——>
绝对路径;
BeanFactory和FactoryBean的区别:
两个类没任何关系;
BeanFactory和ApplicationContext的区别:
BeanFactory
是
ApplicationContext
的父接口,也可以代表
spring
容器。区别是:只有在第一次调
用的时候才会将
bean
进行实例化;而
ApplicationContext
在容器实例化的时候,会将所有的
bean
实例化。
IOC-xml配置
xml详细配置
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
id:该属性是一个字符串,用于标识单个 Bean 定义。
class:该属性定义 Bean 的类型,并使用完全限定的类名。
destroy-method:销毁方法;
init-method:初始化方法;
factory-bean="" 用来配置实例工厂;
factory-method="" 工厂中的具体方法;
lazy-init="default" 懒加载;默认值是false表示的是启动的时候不懒加载;
如果设置成true,在容器加载的时候不加载该bean,在第一次调用
该bean的时候,才进行加载。
name="" name属性值在此处等同于id;理论上可重复,在整合struts2的时候可以重复;
struts2中name属性类似于URL写法,"/xxx";
scope="" 作用域:
singleton:单例;默认spring全部使用单例;
prototype:多例;
request:每次请求生成一个对象;
session:每次会话生成一个对象;
-->
<bean id="u" class="cn.ry.pojo.User" >
</bean>
<bean id="dao" class="cn.ry.dao.impl.UserDaoImpl"></bean>
</beans>
JavaBean配置
静态工厂类实现
创建静态工厂实体类
public class StaticFactory {
public static Object getObject() {
//获取userDAO;
UserDao dao = new UserDaoImpl();
System.out.println("静态工厂实现-----------------");
return dao;
}
}
xml
<!-- 通过静态工厂类来得到想要的dao实现类:
factory-method:工厂类中的方法;
-->
<bean id="sfactory" class="cn.ry.factory.StaticFactory" factorymethod="getObject">
</bean>
实例工厂类实现
java类操作
public class InstanceFactory {
public Object getObject() {
//获取userDAO;
UserDao dao = new UserDaoImpl();
System.out.println("实例工厂实现-----------------");
return dao;
}
}
xml配置
<!-- 通过实例工厂类来得到想要的dao实现类:
实例工厂需要先配置实例工厂对象;
-->
<bean id="ifactory" class="cn.ry.factory.InstanceFactory"></bean>
<bean id="dao" factory-bean="ifactory" factory-method="getObject">
</bean>
Bean生命周期控制:
1.Xml文件中配置初始化和销毁方法—init-method/destroy-method;
2.使用接口控制-InitializingBean,DisposableBean
Bean生命周期:
- 初始化容器
- 创建对象(内存分配)
- 执行构造方法
- 执行属性注入(set操作)
- 执行bean初始化方法
- 使用bean(执行业务操作)
- 关闭/销毁容器(执行bean销毁方法)
IOC-注解配置
@Component
如果类上面添加该注解,表示将当前类交给
spring
容器来进行管理。
要求
- 在项目中需要导入spring-aop的jar包;
- 在配置文件中添加context的约束以及命名空间xmlns
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 开启包扫描:开启后的包中的类添加@Component就可以交给spring容器管理
注意:
1、此处写的是包名;
2、多个的话使用,进行分隔;
-->
<context:component-scan base-package="cn.ry.pojo"></context:componentscan>
</beans>
@PostConstruct:
方法级别注解,加上后表示该方法是初始化方法
;
@PreDestroy:
方法级别的注解,加上后表示该方法是销毁方法
;
@Lazy:
懒加载
;
@Component相近的语义化注解:
- @Repository 放置在dao上;
- @Service 放置在service实现类上;
- @Controller 放置在控制层上——》在控制层上的@Controller和@Component有所区别,不可互换。