失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Spring-IoC-03

Spring-IoC-03

时间:2019-01-29 17:28:19

相关推荐

Spring-IoC-03

bean scope属性

singleton单例

singleton是容器默认的scope,所以写和不写没有区别。scope为singleton的时候,在Spring的IoC容器中只存在一个实例,所有对该对象的引用将共享这个实例。该实例从容器启动,并因为第一次被请求而初始化后,将一直存活到容器退出,也就是说,它与IoC容器“几乎”拥有相同的寿命

对象实例数量:singleton类型的bean定义,在一个容器中只存在一个共享实例,所有对该类型bean的依赖都引用这一单一实例对象存活时间:singleton类型bean定义,从容器启动,到它第一次被请求而实例化开始,只要容器不销毁或退出,该类型的单一实例就会一直存活

优点:

在单例模式下,可以减少每次创建对象的内存空间,减少CPU的计算资源。

全局只有一个对象,当多次调用该对象时,会不会出现堵塞现象?

singleton在容器是单例多线程执行,不会造成堵塞

缺点:

存在线程安全风险。

演示:

当由两个任务需要调用a对象的num属性时,任务A在调用setNum(1),同时任务B调用setNum(2),再次之后任务A调用getNum()输出a的num时却不是1,而是2。

prototype多例

对于那些请求方不能共享的对象实例,应该将其bean定义的scope设置为prototype。这样,每个请求方可以得到自己对应的一个对象实例。通常,声明为prototype的scope的bean定义类型,都是一些有状态的,比如保存每个顾客信息的对象

缺点:

prototype在容器中多实例,占用更多资源。

优点:

不存在线程安全问题。

singleton与prototype对比

基于注解与java config配置IoC容器

基于注解的配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><context:annotation-config/></beans>

组件类型注解

这四个注解,均使用在类上

@Component 组件注解,通过注解,被该注解描述的类将被IoC容器管理并实例化

@Controller 语义注解,说明当前类是MVC应用中的控制器类

@Service 语义注解,说明当前类是Service业务服务类

@Repository 语义注解,说明当前类用于业务持久层,通常描述对应Dao类

开启组件扫描

<!--XML配置开启组件扫描,才能使用注解--><context:component-scan base-package="package"><!--排除某些类--><context:exclude-filter type="regex" expression="Class"/></context:component-scan>

组件类型注解默认beanId为类名首字母小写;

使用注解的value属性修改beanId。

自动装配注解

按类型装配:

@AutoWired 按容器内对象类型动态注入属性,由Spring机构提供

@Inject 基于JSR-330标准,其他通@AutoWired,但不支持required属性

按名称装配:

@Named 与@Inject配合使用,JSR-330规范,按属性名自动装配属性

@Resource 基于JSR-250规范,优先按名称、再按类型智能匹配

@AutoWired

如果注解放在set方法上,则自动按类型/名称对set方法参数进行注入

如果注解放在属性上,spring IoC容器会自动通过反射技术将属性private修饰符自动改为public,直接进行赋值

@Resource

@Resource设置name属性,则按name在IoC容器中将bean注入

@Resource未设置name属性

以属性名作为bean name在IoC容器中匹配bean,如有匹配则注入按属性名未匹配,则按类型进行匹配,同@AutoWired,需要加入@primary解决类型冲突

在使用@Resource对象时推荐设置name或保证属性名与bean名称一致

元数据注解

为spring IoC容器管理对象时提供一些辅助信息

@Primary 按类型装配时出现多个相同类型对象,拥有此注解对象被优先注入

@PostConstruct 描述方法,相当于XML中init-method配置的注解版本

@PreDestroy 描述方法,相当于XML中destroy-method配置的注解版本

@Scope 设置对象的scope属性

@Value 为属性注入静态数据

基于java Config配置IoC容器

优势

完全摆脱XML的束缚,使用独立java类管理对象与依赖

注解配置相对分散,利用java Config可对配置集中管理

可以在编译时进行依赖检查,不容易出错

java Config核心注解

@Configuration 描述类,说明当前类是Java Config配置类,完全替代XML文件

@Bean 描述方法,方法返回对象将被IoC容器管理,beanId默认为方法名

@ImportResource 描述类,加载静态文件,可使用@Value注解获取

@ComponentScan 描述类,同XML的<context:compoment-scan>标签

如果觉得《Spring-IoC-03》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
Spring-IOC推导

Spring-IOC推导

2020-05-06

Spring-IOC本质

Spring-IOC本质

2021-10-15

Spring-IOC是什么

Spring-IOC是什么

2022-09-03

Spring-IOC本质分析

Spring-IOC本质分析

2023-09-09