spring的ioc注入方式有几种

spring的ioc注入方式有几种,第1张

一、Set注入

二、构造器注入

三、静态工厂的方法注入

内容拓展:

一、Set注入

1、这是最简单的注入方式,假设有一个SpringAction,类中需要实例化一个SpringDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建SpringDao的set方法(这是ioc的注入入口)。

2、随后编写spring的xml文件,<bean>中的name属性是class属性的一个别名,class属性指类的全名,因为在SpringAction中有一个公共属性Springdao,所以要在<bean>标签中创建一个<property>标签指定SpringDao。<property>标签中的name就是SpringAction类中的SpringDao属性名,ref指下面<bean name="springDao">,这样其实是spring将SpringDaoImpl对象实例化并且调用SpringAction的setSpringDao方法将SpringDao注入。

二、构造器注入

1、这种方式的注入是指带有参数的构造函数注入,看下面的例子,我创建了两个成员变量SpringDao和User,但是并未设置对象的set方法,所以就不能支持第一种注入方式,这里的注入方式是在SpringAction的构造函数中注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来。

2、在XML文件中同样不用<property>的形式,而是使用<constructor-arg>标签,ref属性同样指向其它<bean>标签的name属性。

三、静态工厂的方法注入

1、静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让spring管理所有对象,我们不能直接通过"工程类静态方法()"来获取对象,而是依然通过spring注入的形式获取。

2、同样看关键类,这里我需要注入一个FactoryDao对象,这里看起来跟第一种注入一模一样,但是看随后的xml会发现有很大差别。

我接触spring自动注入的时间并不长,依稀记得有一点,一个类里可以使用自动注入其他bean的前提是这个类本身的管理也是要交给spring容器的。你调用这个方法所在的类可能并不是由spring来管理的,也就是说采用@Autowired这种自动注入应该是无效的,在针对这种情形,spring确实提供这样一种途径,就是在无法自动注入的情况下,直接调用beanfactory去拿某个bean的实例,调用这样方法得到的实例是跟自动注入得到的实例是一样的。

但是如果你主动去new这样一个bean,那spring容器是不会帮助你把这个bean里的属性初始化好的。

如果可以直接自动注入,谁不想省事一点呢,以上基本是我个人一点浅薄的项目经验,希望对你有帮助。

简而言之,Spring是企业级Java的开源开发框架。Spring框架的核心功能可用于开发任何java应用程序。Spring框架的核心模块如下:

任何由 Spring IoC 容器初始化的普通 Java 类都称为 Spring Bean。我们使用 spring 应用程序上下文来获取 Spring Bean 实例。 Spring IoC Container 管理 Spring Bean 范围/作用域的生命周期并在 bean 中注入任何所需的依赖项。

Spring bean的不同作用域:

对于任何 Java 应用程序,都有两个不同的作用域,称为单例(Singleton)和原型(Prototype)

主要有三种不同的作用域(或范围),即 请求(request)、会话(session)和全局会话(global-session) ,专门针对基于 Spring 的 Java Web 应用程序。

Singleton 是任何 bean 的默认作用域。这意味着每个 IoC 容器将创建单个 bean 实例。因此,单例 bean 不是线程安全的。

要设置 spring bean 的范围,我们可以在 标签中使用scope属性。 @scope 用于基于注释的 DI。

Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理它们从创建到销毁的完整生命周期。 Spring 容器使用依赖注入 (DI) 来管理组成应用程序的组件。

有两种不同类型的容器:

BeanFactory 容器 :这是 Spring 容器的核心。 orgspringframeworkbeansfactoryBeanFactory 是一个接口,充当 IoC 容器,它实例化、配置和管理许多 bean。应用示例如下:

ApplicationContext 容器 :orgspringframeworkcontextApplicationContext 接口也充当 IoC 容器,但 ApplicationContext 接口建立在 BeanFactory 接口之上,以提供一些BeanFactory 额外的功能,例如与 Spring 的 AOP 的简单集成、消息资源处理(对于 I18N )、事件传播、Web 应用程序的应用层特定上下文(例如 WebApplicationContext)。所以使用 ApplicationContext 比使用 BeanFactory更好些。示例代码如下:

对于基于注解的依赖注入,使用@Autowired 注解。标有@Component/@Service/@Repository 等的类可以注入到标有@Autowired 的属性中

@Autowired 应用于:

1)基于构造器和setter的区别

2)context:annotation-config 和 context:component-scan 的区别

3)@Component、@Controller、@Repository & @Service 注解的区别

如果一个类用@Component/@Controller/@Service/@Repository 注解标记,那么Spring DI 容器可以在组件扫描机制期间识别该类。但是,对于服务层类使用@Service 是个好主意,并且@Controller 应该在spring mvc web 控制器中使用。 @Repository 用于将 DAO 导入 DI 容器。此外,任何未经检查的异常都将被转换为 Spring DataAccessException。

4)ViewResolver 与 MultipartResolver

ViewResolver 用于按名称解析视图。该接口由 InternalResourceViewResolver 实现 ;

MultipartResolver 用于处理 web 应用程序中的文件上传。

5)Spring MVC 中的验证

orgspringframeworkvalidationValidator 接口支持 spring MVC 验证。验证表单的一些实用方法是 ValidationUtils 类中的 rejectIfEmptyOrWhitespace() 和 rejectIfEmpty()。示例如下:

Spring MVC 中验证表单的另一种方法是:

HandlerInterceptor 接口充当 spring MVC 拦截器。它在服务请求之前和之后拦截。如果您实现了 HandlerInterceptor 接口,则 preHandle()、postHandle() 和 afterCompletion() 是要覆盖的方法。但是,为了避免覆盖,您可以使用 HandlerInterceptorAdapter 类。

实现 ServletContextAware 和 ServletConfigAware 接口并覆盖以下方法:

数据库事务是一组被视为关联工作单元的 *** 作。事务的主要原则是提交所有 *** 作或在失败的情况下回滚所有 *** 作。在交易中提交数据时,我们需要确保交易协议/称为 ACID(原子性-一致性-隔离-持久性)的属性:

全局事务 vs 本地事务:

脏读、幻读和不可重复读:

隔离与传播:

在旧版本的 spring 和 hibernate 集成中,需要 HibernateDAOSupport 和 HibernateTemplate。但是,较新版本的 Spring 不建议使用这两个类(这里仅做了解)。

通常我们从 HibernateDAOSupport 扩展我们的 DAO 类,并且 getHibernateTemplate() 方法将可用于Hibernate会话中的 CRUD *** 作。由于这不是推荐的方法,所以我们在 DAO 中注入会话工厂(SessionFactory)。下面的代码片段会给你一些关于 HibernateDAOSupport 和 HibernateTemplate 的想法:

DAO 是一种设计模式,以最大限度地减少应用程序和后端之间的耦合;

ORM 处理如何将对象映射到对象关系数据库中,从而减少数据库和应用程序之间的耦合。

如果您在没有 DAO 的情况下使用 ORM,那么您的应用程序将变得依赖于 ORM,因此很难从一个 ORM(例如Hibernate)移动到另一个 ORM(例如 NoSQL)。

Spring DAO 是使用@Repository 注解实现的。 Spring 存储库扩展 JPARepository 并传递 JPA 实体及其主键。

最后,关于Spring框架相关的概念就简要介绍到这里,希望这能给你进入并深入Spring技术栈一个简单入口,而不会被Spring技术生态所惊吓(Spring现在都成软件开发技术的全家桶了,啥都有)——日进一步,锲而不舍,终将大成!

以上就是关于spring的ioc注入方式有几种全部的内容,包括:spring的ioc注入方式有几种、Spring不用注入获取bean,这样获取applicationContext.getBean()有什么好处吗、快速切入:Spring框架核心概念总览等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9484911.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存