Spring框架使用概述

对刚学习完spring框架或曾学过但是忘记了的人, 回看此篇博客会有帮助
以下代码全在Maven工程下编写:
创建测试使用spring框架的类, 使用Junit时, 可以选择手动创建ApplicationContext对象

    private ApplicationContext applicationContext;
    accountService = applicationContext.getBean("accountService",
                AccountService.class);

一个简单的使用spring案例:

在这里插入图片描述
从中可以看出, 我们使用spring框架后, 要创建对象的时候, 无需再次使用new, 这样直接交付给spring框架, 让它帮我们去做这件事情, 这样可以降低耦合程度

也可以通过使用@RunWith()注解来使用spring的junit整合
从而免去成员变量applicationContext
在这里插入图片描述

创建bean的注解:

@Controller 用于控制层上的类
@Service 用于业务层操作的类
@Repository 用于持久层操作的类
@Component 除三层架构外的类
准确来说, 这四个注解放在什么类上都行, 而创建这四个不同的注解是为了区分类的层次
四个注解作用相同, 都是让spring使用反射创建实例化对象, 并将其加入到IOC容器中
在这里插入图片描述

查看注解的源代码后发现, 都有这四个注解都有value属性
在这里插入图片描述
value属性注释翻译过来就是:
该值可能表示建议使用逻辑组件名称,在自动检测到组件的情况下,将其转换为Spring bean
不给value赋值时, bean的id值是当前类名且首字母改小写.
@Bean注解也是创建bean, 不过这个注解只能放在方法和注解上
方法上使用该注解: 表示将方法的返回值作为bean对象并将其加入到IOC容器中

@Bean注解的源码表明其和上面四个注解不同
在这里插入图片描述

依赖注入(DI)

当创建一个实例对象的时候, 如果这个类有一个或多个属性(或者叫做成员变量)需要赋值, 这时, 可以让spring让帮我们做这件事情.

在这里插入图片描述
在这里插入图片描述
可见, 使用Autowired和Qualifier可以实现依赖注入, 方法参数或者成员变量均可, 且Qualifier可以实现特定标记的bean的注入
在这里插入图片描述
在上述案例中使用的@ComponentScan注解和xml文件中的
在这里插入图片描述
作用是等效的, 都是通知spring要扫描的包

动态代理

使用Proxy类的newProxyInstance()方法生产一个动态代理对象, 可以对对象的方法进行增强和改造(在不改变原对象的代码基础上)
在这里插入图片描述
使用示例:
在这里插入图片描述
测试结果:
在这里插入图片描述
之所以要介绍这个动态代理, 是因为和spring提供的AOP有关

五种类型的通知

前置
后置
异常
最终

环绕. 前四种通知其实可以被环绕通知承包
类似于这样,
在这里插入图片描述
其中异常通知在catch块中, 最终通知在finally块中

假设有如下通知类
在这里插入图片描述

在这里插入图片描述

运行结果在这里插入图片描述
从上图可以看出, 在未更改实现类方法的代码的情况下, 我们能对方法进行改造.

猜你喜欢

转载自blog.csdn.net/Valishment/article/details/107577350