spring 属性注入
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring 属性注入内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring 属性注入相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring 属性注入相关知识
-
spring bean setter属性注入我们可以方便的通过构造函数来注入spring bean,也可以通过setter属性来做spring bean的注入。注入简单类型的属性一个简单的示例,我们给Person类定义age和name两个属性,然后在spring配置文件中通过属性注入值。Person类的定义如下:package cn.outofmemory.spring; public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; }&nbs
-
SpringBoot之Spring@Value属性注入使用详解在使用Spring框架的项目中,@Value是使用比较频繁的注解之一,它的作用是将配置文件中key对应的值赋值给它标注的属性。在日常使用中我们常用的功能都比较简单,本篇文章系统的带大家来了解一下@Value的使用方法。 @Value注入支持形式 @Value属性注入功能根据注入的内容来源可分为两类:通过配置文件的属性注入和通过非配置文件的属性注入。 通过配置文件的注入根据配置文件的来源又可分为两类:一类为默认的Spring Boot会自动加载的配置文件application.properties中的属性;另一类为自定义
-
Spring DI(依赖注入)的实现方式:属性注入和构造注入依赖注入主要有两种实现方式,分别是属性 setter 注入和构造方法注入。具体介绍如下。1)属性 setter 注入指 IoC 容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参 static 工厂方法实例化 bean 后,调用该 bean 的 setter 方法,即可实现基于 setter 的 DI。2)构造方法注入指 IoC 容器使用构造方法注入被依赖的实例。基于构造器的 DI 通过调用带参数的构造方法实现,每个参数代表一个依赖。下面通过属性 setter 注入的案例演示 Spring 容器是如何实现依赖注入的。具体步骤如下。1. 创建 PersonService 接口在 springDemo01 项目的 com.mengma.ioc 包下创建一个名为 PersonService 的接口,该接口中包含一个 addPerson() 方法,如下所示。package com.mengma.ioc;public interface PersonService {public void add
-
Spring DI(依赖注入)的实现方式:属性注入和构造注入依赖注入主要有两种实现方式,分别是属性 setter 注入和构造方法注入。具体介绍如下。1)属性 setter 注入指 IoC 容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参 static 工厂方法实例化 bean 后,调用该 bean 的 setter 方法,即可实现基于 setter 的 DI。2)构造方法注入指 IoC 容器使用构造方法注入被依赖的实例。基于构造器的 DI 通过调用带参数的构造方法实现,每个参数代表一个依赖。下面通过属性 setter 注入的案例演示 Spring 容器是如何实现依赖注入的。具体步骤如下。1. 创建 PersonService 接口在 springDemo01 项目的 com.mengma.ioc 包下创建一个名为 PersonService 的接口,该接口中包含一个 addPerson() 方法,如下所示。package com.mengma.ioc;public interface PersonService {public void add
spring 属性注入相关课程
spring 属性注入相关教程
- 2. 依赖注入案例 2.1概念介绍知识回顾对于依赖注入,我们在第一章第一节已经介绍过,我们回顾一下概念解释上面是我们之前对于依赖注入的一个通俗解释。那么这里再着重强调一下 IOC 控制反转与 DI 依赖注入的关系:IOC 控制反转是将对象实例化的动作交由了 Spring 框架, 它的作用是降低了程序的耦合,不需要我们手动的创建对象,但是程序的耦合性还是存在。对象中肯定会有一些其余对象的引用,那么这种引用就称呼为对象的依赖,而 DI 依赖注入其实 是 IOC 设计思想的一种表现形式。对于 这种属性依赖,我们无需手动赋予,也是讲赋值的动作交给 Spring ,那么这种操作就是 依赖注入。依赖注入方式:第一种方式是通过 xml 配置的方式实现;第二种方式是在属性或者方法上使用注解的方式实现。那么,本章节先带大家体验下 xml 方式实现依赖注入。2.2 工程实现:搭建动作介绍创建一个 maven 工程导入Spring 使用的依赖编写业务层的 Service 和持久层的 Dao java 类编写 Spring 的配置文件创建工程 导入依赖 省略可以参考之前创建过的IOC工程java 代码创建 Servcie 的接口和接口的实现类,代码如下://接口代码public interface UserService { public void deleteById(Integer id);}//实现类代码public class UserServiceImpl implements UserService { private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void deleteById(Integer id) { System.out.println("删除的方法执行"); }}UserDao 接口和实现类代码://dao接口代码public interface UserDao {}//dao实现类代码public class UserDaoImpl implements UserDao {}代码解释: dao的接口和实现类中并没有方法,只是为了测试 作为service中的属性依赖,可以实现由 Spring 完成动态注入。重点来了:spring 的核心配置文件:配置解释:在上面的配置文件中:bean 标签是描述一个被实例化的类 而 property 则表示一类中的属性property 标签中的属性 name 一般我们写成类中的属性名称, 实际上,起决定作用的并不是属性名,下面示例再展示ref 表示当前的属性 是一个引用对象,而引用的是谁呢? ref 中的值 必须是在容器中已经实例化的一个引用对象的唯一标识。value 当前的属性可以直接赋值,所以通过 value 中,填写要赋予的数值即可测试结果代码解释可以看到 我们得到了 service 中的类属性 Userdao 的实例,并且也 得到了 字符串属性 userName的值 zs2.3 property注入属性的解释刚刚我们在上面的示例中 展示了xml依赖属性的注入,也是比较好理解。这里我们强调一下使用的注意事项:如果是 property 属性标签实现属性注入,那么类中必须由配置在 property 标签中 name 属性的 set 方法下面我们测试一下set方法的改变:先讲 service 中 dao 的 set 方法改造如下:public void setDao(UserDao userDao) { System.out.println("执行了set方法 给dao属性赋值"); this.userDao = userDao;}这时候代码中的set方法变成了 setDao 配置文件不变,依然是<property name="userDao" ref="userDao"></property>我们看看会产生什么问题Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'userDao' of bean class [com.wyan.service.UserServiceImpl]: Bean property 'userDao' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:247) at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:426) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:266) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:77) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1646)可以看到异常的堆栈信息 无效的 userDao 属性, userDao 不可以 或者 没有有效的 setter 方法提供。更改xml文件中的 property 标签的 name 属性 为 dao<property name="dao" ref="userDao"></property>测试结果如下:所以我们说 property 中的 name 属性不一定要跟 Java类中的属性名保持一致 而是必须跟 setter 方法的名称一致
- 1. 属性 首先,我们来介绍一下 Maven 的属性特性。其实,在我们之前的章节中,一直都有在使用 Maven 的属性。例如我们在引入 Spring 框架的时候,将 Spring 框架的版本号信息抽象出来,放到 properties 节点中去,在使用这个版本号的时候,可以通过${}来引用。<properties> <spring.version>4.0.2.RELEASE</spring.version></properties><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> </dependencies></dependencyManagement>我们都知道抽象了spring.version属性之后,可以减少我们很多的工作量,而且也便于我们对 pom.xml 文件的管理。在 Maven 的世界中,这只是其中一种属性。那我们来介绍一下 Maven 的属性的种类。内置属性: Maven 的内置属性主要有两个,一个是${basedir}用来表示项目的根目录,另一个是${version}用来表示项目的版本号;POM属性: 用来引用 pom.xml 文件中对应元素的值。一般来说,可以用${project.*}来表示,例如:${project.groupId}就是用来表示项目的 groupId 信息;自定义属性: 这个比较容易理解,就像我们上面例子中的${spring.version}就属于自定义属性的范围;Settings属性: 与 POM 属性类似。通常使用${settings.*}来表示,Settings 属性用来指向 settings.xml 文件中的属性,例如:${settings.localrepository}可以用来表示本地仓库的地址;Java系统属性: 所有 Java 的系统属性都可以通过 Maven 属性来引用。我们在使用之前可以通过mvn help:system命令来查看对应的属性;环境变量属性: 所有的环境变量属性都可以通过 Maven 属性来引用。通常用 ${env.*}来表示。我们在很多地方都可以用到 Maven 属性,例如我们的示例项目中,多模块直接互相引用的时候,我们会用到${project.groupId}和${project.version},来管理项目内部依赖。会用到${project.basedir}来指定项目配置文件的路径。
- 4.2 AuthorizationScope 注解相关属性 scope() 和 description() 属性定义:scope 属性是用来描述访问接口的权限的具体的一个范围名称,即描述接口访问的单个权限名称。description 属性就是对这个单个的权限名称做一个简短的描述,来解释说明这个权限所代表的意思。使用方法:scope 和 description 两个属性的使用方法和 Authorization 注解中属性的使用方法相同,这里还是以 @ApiOperation 注解为例,详细代码使用方法如下。@ApiOperation(value = "userlogin", authorizations = { @Authorization(scopes = { @AuthorizationScope(scope = "普通用户", description = "common user") } })public ServerResponse<User> login(User user){ // do something...} 代码解释:我们可以看到,AuthorizationScope 注解中属性的使用方法代码和 Authorization 中的是完全相同的,这就说明:如果想对接口方法定义访问权限范围,则必须要使用 AuthorizationScope 注解才行,这里不再赘述。Tips :在使用 AuthorizationScope 注解时,注意和 @ApiOperaion 注解的搭配,代码格式稍微有些绕,同学们在学习时需要理清楚代码格式。AuthorizationScope 注解的两个属性经常用于在接口权限存在多条时使用,一般很少单独使用。
- 4.2 ExtensionProperty 注解相关属性 name () 和 value () 属性定义:name 属性是用来描述接口方法中每一个拓展参数的名称,即给每一个拓展参数都起一个名字。value 属性表示每一个接口方法中的拓展参数的具体的值,或者对拓展参数的解释说明。使用方法:name 和 value 两个属性的使用方法和 @Extension 注解中属性的使用方法相同,这里还是以 @ApiOperation 注解为例,详细代码使用方法如下。@ApiOperation(value = "user", extensions = { @Extension(name = "用户登录拓展参数", properties = { @ExtensionProperty(name = "userEmail", value = "user email") } ) })public ServerResponse<User> login(User user){ // do something...} 代码解释:我们可以看到,ExtensionProperty 注解中,属性的使用方法,是通过 @ApiOperation 注解中的 properties 属性来定义的,这里不再赘述。Tips :在使用 ExtensionProperty 注解时,注意是和 @ApiOperaion 注解中的哪个属性进行搭配,其固定的代码方式是什么,这是同学们需要理清的地方。ExtensionProperty 注解的两个属性经常用于指名多个接口方法中的拓展参数,很少会只指名一条,在实际开发中,如果接口方法存在多个拓展参数,那么应该都指名出来才对。
- 4. Spring MVC 的特性 要了解 Spring MVC 的功能特性,就需要从 WEB 应用开发的源头说起。WEB 应用程序的主流开发技术有 3 种:servlet;php;.net。Servlet 是基于 Java 语言的动态 web开发技术,Servlet 指的是 J2EE 中所提出来的企业级服务器开发规范。原生 Servlet 构建的 MVC 开发模式有几个缺点:Servlet 本身采用单例设计模式,生命周期由服务器维护,存在线程安全隐患的问题;理论上讲,每一次不同的 http 请求需要一个 Servlet 组件来响应,当请求类型比较多时,Servlet 就会相应增加,也意味着每一个 Servlet 都可以成为进入服务器的入口。想想你家里对外开了好多扇门,小偷终能找到破绽;随着 Servlet 数量的增加,对服务器的存储空间也会产生压力;使用 Servlet 响应用户请求时,每一个响应逻辑都需要开发者不厌其烦地做些重复的事情,如,解析请求包中的数据、构建响应包、设置页面跳转等等。这些问题,在 Spring MVC 中都得到了很好的解决。使用 Spring MVC 时,就只有一个门可以进入应用程序,这个门叫前端(中央)控制器,所有请求统一经过这个前端控制器分流到具体的内部响应组件;Spring MVC 是 Spring 家族中的一员,有句话叫做“近水楼台先得月”。使用 Spring MVC 时所需要的 WEB 组件也好、其它的逻辑组件也好,都经由 Spring IOC 创建,Spring IOC 容器对组件的生命周期可进行伸缩性设置管理,可根据组件特性保证其线程安全性;Spring MVC 和 Spring 有直属血缘的关系,两者完美结合,使得程序的安全性和稳定性有一定的保证;Spring MVC 利用 Spring 的自动注入功能,能轻松地装配好各组件之间的依赖,开发者只需要关注编写自己的业务逻辑便可,和所有框架理念一样,解放双手,释放大脑。Spring MVC 设计的初衷,就是要做成一款轻量级框架,其内在的原力让我们一起在后续课程中慢慢释放。
- 4.1 Authorization 注解相关属性 value() 属性定义:该属性就是对接口访问权限添加一个名称,即接口访问权限的名称是什么。使用方法:value 属性的使用方法有些特殊,不能单独使用,因为单独使用时, Swagger 并不会解析该属性,需要和 @ApiOperaion 注解和 @Api 注解一起搭配使用,这样 Swagger 才会解析该注解。但是使用该属性所描述的值并不会显示在界面上,只会显示一个标志,表明该接口方法具有 Swagger 的权限控制策略,如果想要在界面上调试该接口需要一定的权限。这里以 @ApiOperaion 注解为例,在 ApiOperaion 注解中直接声明 authorizations 属性的值即可,authorizations 的值是一个 Authorization 类型的数组。例如,对于用户登录接口,我想添加一个名称为’普通用户可访问‘的权限名称,我们可以这样写:authorizations = { @Authorization(value = “普通用户可访问”) (现在你不需要理解业务代码代表什么意思,重点看所使用的注解及属性即可,下同)。@ApiOperation(value = "userlogin", authorizations = { @Authorization(value = "普通用户可访问") })public ServerResponse<User> login(User user){ // do something...} 代码解释:1-3 行,我们在用户登录接口方法的上方定义了 ApiOperation 注解的 authorizations 属性,其值为 Authorization 注解的 value 属性所描述。显示结果:可以看到,在红色箭头所指的右上角位置有一个锁的图片,这个锁的图片就是我们使用 Authorization 注解的 value 属性所展示的效果了。Tips : 在使用 Authorization 注解的 value 属性前需要在 Swagger 的配置类中取配置和权限有关的 schema ,如果不配置的话,就不能对接口进行权限控制,由于本门课程针对 Swagger 初学者,所以这里就不再介绍了,感兴趣的可以自行查阅资料了解。scopes() 属性定义:该属性就是对接口权限的范围做一个描述,即描述该接口都可以允许哪些权限访问,超过这个权限就不能访问该接口。使用方法:scopes 属性的使用方法和 value 属性的使用方法相同,这里还以 @ApiOperation 属性为例,详细代码如下所示。由于 scopes 属性的值是使用 AuthorizationScope 注解来描述,且 AuthorizationScope 注解的使用要求项目中必须要用到 OAuth2 框架,所以 scopes 属性的描述也要求项目中必须要用到 OAuth2 框架,OAuth2 框架的使用不在本门课程内,所以这里就不再演示了。综上所述,同学们只需要知道这个属性的基本作用和基本用法即可。@ApiOperation(value = "userlogin", authorizations = { @Authorization(scopes = { @AuthorizationScope(scope = "普通用户", description = "common user") } })public ServerResponse<User> login(User user){ // do something...} 代码解释:1-3行,我们在用户登录接口方法的上方定义了 ApiOperation 注解的 authorizations 属性,其值为 Authorization 注解的 scopes 属性所描述。Tips : 在实际项目开发中,如果非要使用 Authorization 注解的 scopes 属性来对接口进行权限控制,那么项目中必须要有 OAuth2 框架,但是往往此框架可以直接对接口进行权限控制,不需要再使用该注解进行配置了。
spring 属性注入相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议