sping学习笔记-基础
1.Spring简介
- Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核。
- 提供了展现层 SpringMVC 和持久层 Spring JDBCTemplate 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架
2. Spring配置
2.1 Spring pom 核心配置
配置applicationContext.xml文件
5.0.5.RELEASE
org.springframework
spring-context
${spring.version}
2.2 spring配置文件(appclicationContext.xml)
2.2.1 Bean
标签
-
scope:指对象的作用范围,取值如下:
取值范围 说明 singleton 默认值,只能通过IOC容器创建单个对象,在初始化IOC容器时创建 protype 可创建多个对象,在getBean()时创建 request WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中 session WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中 global session WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于session -
Bean
生命周期及说明-
当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
+ 对象创建:当应用加载,创建容器时,对象就被创建了
+ 对象运行:只要容器在,对象一直活着
+ 对象销毁:当应用卸载,销毁容器时,对象就被销毁了 -
当scope的取值为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
+ 对象创建:当使用对象时,创建新的对象实例
+ 对象运行:只要对象在使用中,就一直活着
+ 对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
-
-
init-method:指定类中的初始化方法名称
-
destroy-method:指定类中销毁方法名称
2.2.2.1 注入方式
-
set方法注入
需要重写Getter和Setter
-
property属性
-
bean 标签引入命名空间p xmlns:p="http://www.springframework.org/schema/p"
-
-
构造方法注入
constructor-arg
标签
-
其他数据类型的注入
2.2.2 引入其他配置文件
- 可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载
2.2.3 配置重点
标签
id属性:在容器中Bean实例的唯一标识,不允许重复
class属性:要实例化的Bean的全限定名
scope属性:Bean的作用范围,常用是Singleton(默认)和prototype
标签:属性注入
name属性:属性名称
value属性:注入的普通属性值
ref属性:注入的对象引用值
标签
2.3 Spring相关API
ClassPathXmlApplicationContext
它是从类的根路径下加载配置文件 推荐使用这种FileSystemXmlApplicationContext
它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。AnnotationConfigApplicationContext
当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
- 上述类的
getBean()
方法public Object getBean(String name) throws BeansException { assertBeanFactoryActive(); return getBeanFactory().getBean(name); } public
T getBean(Class requiredType) throws BeansException { assertBeanFactoryActive(); return getBeanFactory().getBean(requiredType); } - 使用建议:
- IOC容器存在多个对象/id时,使用getBean("id"),仍需要强转
- IOC容器存在单个对象/id时,使用getBean(ClassName.class),不需要强转
3. Spring配置数据源
常见数据库连接池 DBCP、C3P0、BoneCP、Druid等
- spring 加载properties文件并创建数据源
4. spring注解开发
4.1 spring原始注解
注解 | 说明 |
---|---|
@Component | 使用在类上用于实例化Bean |
@Controller | 使用在web层类上用于实例化Bean |
@Service | 使用在service层类上用于实例化Bean |
@Repository | 使用在dao层类上用于实例化Bean |
@Autowired | 使用在字段上用于根据类型依赖注入 |
@Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |
@Resource | 相当于@Autowired+@Qualifier,按照名称进行注入 |
@Value | 注入普通属性 |
@Scope | 标注Bean的作用范围 |
@PostConstruct | 使用在方法上标注该方法是Bean的初始化方法 |
@PreDestroy | 使用在方法上标注该方法是Bean的销毁方法 |
- 需先配置扫描组件功能
4.2 spring新注解
可实现配置类进行配置
- 新注解及说明
注解 | 说明 |
---|---|
@Configuration | 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解 |
@ComponentScan | 用于指定 Spring 在初始化容器时要扫描的包。作用和在 Spring 的 xml 配置文件中的 |
@Import | 用于导入其他配置类 |
@Bean | 使用在方法上,标注将该方法的返回值注入到 Spring 容器中 |
@PropertySource | 用于加载.properties 文件中的配置 |
- 加载配置类、IOC容器的方式
package cn.edu.cup.demo;
import cn.edu.cup.config.SpringConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class AnnotationTest {
public static void main(String[] args) throws SQLException {
ApplicationContext ac=new AnnotationConfigApplicationContext(SpringConfig.class);
DataSource dataSource = ac.getBean(DataSource.class);
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}
5. Spring整合Junit
-
导入Spring集成Junit的坐标
org.springframework spring-test 5.3.14 -
使用@Runwith注解替换原来的运行期
@RunWith(SpringJUnit4ClassRunner.class)
-
使用@ContextConfiguration指定配置文件或配置类
import org.springframework.test.context.ContextConfiguration; @ContextConfiguration(classes = {SpringCofiguration.class})
-
使用@Autowired注入需要测试的对象
-
创建测试方法进行测试
6. Spring AOP
6.1 Spring的AOP简介
-
AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理
实现程序功能的统一维护的一种技术。 -
AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍
生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序
的可重用性,同时提高了开发的效率。 -
AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态
的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。 -
常用的动态代理技术
- JDK 代理 : 基于接口的动态代理技术
- cglib 代理:基于父类的动态代理技术
-
常用术语:
- Target(目标对象):代理的目标对象
- Proxy (代理):一个类被 AOP 织入增强后,就产生一个结果代理类
- Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
- Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义
- Advice(通知/ 增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知
- Aspect(切面):是切入点和通知(引介)的结合
- Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入
-
aop的重点概念:
- Pointcut(切入点):被增强的方法
- Advice(通知/ 增强):封装增强业务逻辑的方法
- Aspect(切面):切点+通知
- Weaving(织入):将切点与通知结合的过程
-
开发明确事项:
- 谁是切点(切点表达式配置)
- 谁是通知(切面类中的增强方法)
- 将切点和通知进行织入配置
6.2 基于xml的AOP开发
-
aop坐标
org.springframework spring-context 5.0.5.RELEASE org.aspectj aspectjweaver 1.8.13 -
步骤
- 导入AOP坐标
- 创建目标接口和实现类(内部有切点)
- 创建切面(内部有增强/通知方法)
- 将目标类和切面类的对象创建权交给 spring
- 在 applicationContext.xml 中配置织入关系
- 测试代码
-
applicationContext.xml 中配置织入关系
-
切点表达式的写法
execution([修饰符] 返回值类型 包名.类名.方法名(参数))
- 访问修饰符可以省略
- 返回值类型、包名、类名、方法名可以使用星号* 代表任意
- 包名与类名之间一个点 . 代表当前包下的类,两个点 .. 表示当前包及其子包下的类
- 参数列表可以使用两个点 .. 表示任意个数,任意类型的参数列表
-
通知类型
名称 标签 说明 前置通知 Spring网课学习 相关