Spring IOCAOPBean

Spring是一个轻量级的控制反转IOC和面向切面编程AOP的框架

Spring 自带 IoC(Inverse of Control:控制反转) 和 AOP(Aspect-Oriented Programming:面向切面编程)、可以很方便地对数据库进行访问、可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。

ApplicationContext作为Spring容器,Bean在ApplicationContext容器中

1、控制反转IOC

是一种思想:两方之间不互相依赖,由第三方容器来管理相关资源。

ioc实现基础包:org.springframework.beans 和org.springframework.context

(1)控制:对象创建、实例化、属性赋值、对象间关系管理的权利

(2)反转:控制权交由Spring框架、IOC容器,由这些容器来创建管理对象 例:Tomcat 创建servlet对象

(3)好处:对象之间解耦、降低依赖;资源容易管理

(4)实现方式: 依赖注入(DI注入)创建对象,给属性赋值

= DI注入的方式(可用xml配置文件 可用注解)

==1、构造注入

spring调用类的有参数构造方法 创建对象并完成赋值

==2、set注入(经常使用)

spring调用类的set方法 实现属性的赋值

==3、扩展方式注入(p命名空间、c命名空间)

p命名空间注入:可以直接注入属性的值property

c命名空间注入:构造器注入 construct-arg

导入约束xmlns:p="http://www.springframework.org/schema/p"

2、面向切面编程AOP

是OOP(面向对象编程)的一种延续。

相比较OOP抽取出 横切逻辑代码业务逻辑代码,根本上解耦,避免逻辑代码重复。

(1)基于 动态代理(JDK动态代理 | CGLIB动态代理)

=当要代理的对象实现了某个接口,AOP会使用JDK Proxy;(必须实现接口)

=当要代理的对象没有实现接口,AOP会使用CGLIB Proxy 生成一个被代理对象的子类来作为代理(原理是继承)

(2) aop技术实现的框架

=Spring 属于运行时增强、基于动态代理

=AspectJ 属于编译时增强、基于字节码操作

==实现方式:1、使用XML的配置文件 配置全局事务

2、使用注解(一般的使用方式)

2、切面执行位置 切入点表达式

切入点表达式:execution(访问权限 方法返回值 方法声明(参数)异常裂隙)

execution( set(..)) 指定切入点为:任意一个以”set”开始的方法

execution(* com.qifenle.service. .(..)):包.类.方法 指定切入点为:定义在service包里的任意类,每个类中的任意方法

=切面多的情况下,最好使用AspectJ ,功能更强大,更快

(3)面向切面编程 切面是什么?

非业务方法,给目标类增加的功能,独立使用的(如时间、事务功能、日志、权限验证等)

(4)切面的 执行位置和执行时间

= 切面 Aspect要增强的功能代码

= 连接点 JoinPoint连接业务方法和切面的位置的方法

= 切入点 Poincut多个连接点的集合 切面执行的位置

= 目标对象给目标对象的方法增加功能 , 这个类就是目标对象

= 通知 Advice表示切面功能执行的时间 目标方法执行前或后

3、spring Bean

(1) Bean: 指被ioc容器所管理的对象

(2)bean的 作用域

=1、singleton:单例bean实例 spring默认bean是单例的(单例模式的应用)

=2、prototype: 每次请求都会创建一个新的bean实例

=3、request: 每次HTTP请求都会产生一个新的bean,仅当前request请求周期内有效

=4、session:每次新的session的HTTP请求都会产生一个新的bean,仅当前HTTP的session周期内有效

配置bean的作用域(xml方式)
<bean id="..." class="..." scope="singleton">bean>

(3)bean的三种装配方式

=1、byName自动装配

=2、byType自动装配

=3、自动装配注解

@Autowired 通过byType再通过byname的方式实现,而且必须要求这个对象存在 有时需要@Qualifier(value=”id”)指定id

@Resource默认通过byName的方式实现,如果通过byName实现不了 则通过byType实现 两个都实现不了则报错

(4)注解的区别:

声明一个类为Bean的注解有:

@Autowired 自动装配

@Component 通用的注解,可将任意类作为bean交由spring管理

@Repository 持久层注解 Dao|Mapper层 主要用于数据库相关操作

@Service 服务层注解 逻辑代码操作

@Controller 控制层操作 主要用于用户请求和接收Service层返回的数据给前端

=1、 @Component作用于类,放在类上说明这个类被spring容器管理了

通过类路径扫码自动装配到spring的bean容器中

=2、 @ComponentScan作用于类

可以自定义要扫描的路径

=3、 @Bean作用于方法

标注在方法上,将该实例装配到spring的bean容器中

比@Component自定义性更强,第三方类库的类装配到spring容器中经常使用

=4、 @Value作用在set方法或属性上

@Value(“禾下凉”)//相当于

(2)bean的生命周期

=1、实例化bean对象

=2、设置对象属性 利用set()方法设置

=3、实现检查*Aware接口,若实现便调用相关的set方法,传入相关的对象实例。例:

==实现了BeanNameAware接口,调用setBeanName(),传入Bean的名字

==实现了BeanClassLoaderAware接口,调用setBeanClassLoader(),传入ClassLoader对象实例

==实现了BeanFactoryAware接口,调用setBeanFactory(),传入BeanFactory对象实例

=4、BeanPostProcessor对象前置处理,执行postProcessBeforeInitialization()方法

=5、检查是否实现InitializingBean即可,有就调用afterPropertiesSet()方法

=6、检查是否配置有包含自定义init-method属性,有,执行指定方法

=7、BeanPostProcessor对象后置处理,执行postProcessAfterInitialization()方法

=8、Bean使用阶段

=9、销毁Bean,如果bean实现了DisposableBean接口,执行destroy()方法

=10、销毁Bean,如果配置文件中有定义包含destroy-method属性,执行指定方法

Original: https://www.cnblogs.com/hexiayuliang666/p/16147063.html
Author: 与长安故里
Title: Spring IOCAOPBean

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/570778/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [SPLUSH WAVE] DragonMahjongg3~天空編~ 1.07版修改器+界面汉化

    修改器只针对游戏1.07版本,请勿升级游戏版本!! 修改器界面,上面的好理解,最下面的当你抓到第一张牌后会根据你抓的牌来给你一个和的牌,抓牌了后要等一秒才生效. 其他没啥说的了,修…

    Java 2023年5月29日
    058
  • Android自定义View4——统计图View

    1、介绍 周末在逛慕课网的时候,看到了一张学习计划报告图,详细记录了自己一周的学习情况,天天都是0节课啊!正好在学习Android自定义View,于是就想着自己去写了一个,这里先给…

    Java 2023年6月13日
    065
  • JPA, Hibernate注解

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/elementplay/p/8242645.htmlAu…

    Java 2023年6月6日
    083
  • SpringBoot配置文件优先级

    在开发过程中,不知道有没有这样的经历,项目实际读取的配置信息有时候总是与预期不符,今天就来研究下 SpringBoot 读取配置文件顺序。 一、SpringBoot 配置文件加载优…

    Java 2023年6月5日
    080
  • Redis小秘密

    Redis小秘密 临渊羡鱼,不如退而织网。 一、Redis基本数据类型 想必很多人都能脱口而出String、List、Hash、Sorted Set和Set五种基本数据类型。 以及…

    Java 2023年6月5日
    069
  • SpringResourceBundleMessageSource示例(转)

    对于支持国际化的应用程序,它需要能够为不同的语言环境解析文本消息。Spring的应用程序上下文能够通过键解析目标语言环境的文本消息。通常,一个语言环境的消息应存储在一个单独的属性文…

    Java 2023年5月30日
    057
  • git学习(一)-fork操作

    fork操作 对于某一个项目来说,如果自己不属于开发者中的一员,那么只能先fork别人的代码,然后将代码拉取到本地进行修改之后,再向原来的项目发起pull request。 for…

    Java 2023年6月7日
    064
  • 记录Feign调用时对LocalDateTime的处理

    feign api调用参数类型为LocalDateTime一直报错,类型转换错误 简单记录一下解决方式吧 调用方 import org.springframework.contex…

    Java 2023年6月8日
    084
  • Set集合

    一、Set集合简介 Set集合简单来说相当于一个桶,程序可以依次的把多个对象丢进桶中(Set集合) Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,…

    Java 2023年6月9日
    079
  • Spring5 简介与IOC核心

    Spring5 简介与IOC核心 1、Spring是一款轻量级的开源javaEE框架 2、Spring的作用:解决企业应用开发的复杂性 3、Spring的核心:IOC和Aop (1…

    Java 2023年6月7日
    080
  • 【消息队列高手课】- 基础篇

    【消息队列高手课】- 基础篇 消息队列都有哪些选择: RabbitMQ – 特色:Exchange模块,开箱即用 RocketMQ – 特色:低延迟和金融级…

    Java 2023年6月8日
    073
  • Docker 环境 Nacos2 MySQL8

    本文介绍 docker 环境下安装并单机运行 Nacos2,使用 docker 环境下的 MySQL 8 存储数据。 1 拉取镜像 1.1 创建目录 在硬盘上创建 nacos 的有…

    Java 2023年6月16日
    052
  • SpringBoot自定义classloader加密保护class文件

    背景 最近针对公司框架进行关键业务代码进行加密处理,防止通过jd-gui等反编译工具能够轻松还原工程代码,相关混淆方案配置使用比较复杂且针对springboot项目问题较多,所以针…

    Java 2023年6月15日
    074
  • 让服务器apache/iis/nginx支持.apk/ipa文件下载

    IIS服务器不能下载.apk文件的原因:iis的默认MIME类型中没有.apk文件,所以无法下载。 IIS服务器不能下载.apk文件的解决办法:既然.apk无法下载是因为没有MIM…

    Java 2023年5月30日
    084
  • gitee上传代码到仓库步骤(最简洁图文+命令说明)

    gitee上传代码到仓库步骤(最简洁图文+命令说明) 1、初始化项目 2、将当前目录下所有需要上传的文件代码等资源添加到缓存区 3、 提交缓存区里面的主要内容到本地仓库 4、添加一…

    Java 2023年6月5日
    083
  • 【SpringCloud-Alibaba系列教程】2.搭建用户微服务模块

    本节是陆续搭建系统和编码的开始,我们会优先完成一个基础工程的创建。一般在互联网企业这部分工作可能不需要反复处理,只需要在承接产品需要后使用脚手架或者直接复制以往工程就可以创建现有需…

    Java 2023年6月5日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球