spring 注入的类型
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring 注入的类型内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring 注入的类型相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring 注入的类型相关知识
-
最详细的 Spring IOC 注入 (xml 注入 + 注解注入)@[toc](Spring IOC 容器的基本使用) 一、为什么要使用 Spring? 1.1 传统的 MVC 架构的程序 1.2 程序耦合性过高? 1.3 如何解耦? 1.4 Spring IOC 的依赖注入 二、Spring IOC 的依赖注入 2.1 使用构造函数完成依赖注入 2.1.1 标签的使用讲解 2.1.2 构造函数依赖注入的优缺点 2.1.3 使用构造函数完成依赖注入的实例 2.2 使用 setter 完成注入 2.2.1 使用 setter 完成依赖注入的功能 2.2.2 基于 setter 完成依赖注入的分析 2.3 复杂数据类型注入 2.3.1
-
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
-
Spring 常用的注解及“依赖注入”的实现1、spring注解@Controller 声明Action组件@Service 声明Service组件 @Service("myMovieLister") @Repository 声明Dao组件@Component 泛指组件, 当不好归类时. @RequestMapping("/menu") 请求映射@Resource 用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName")@Resource有两个中重要的属性:name和type ,而Spring将@Resource注解的name属性解析为bean的 名字.(即bean的id名),而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用 byType自动注入策略
-
Spring 注入集合注入集合你已经看到了如何使用 value 属性来配置基本数据类型和在你的 bean 配置文件中使用<property>标签的 ref 属性来配置对象引用。这两种情况下处理奇异值传递给一个 bean。现在如果你想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties,应该怎么做呢。为了处理这种情况,Spring 提供了四种类型的集合的配置元素,如下所示:元素描述<list>它有助于连线,如注入一列值,允许重复。<set>它有助于连线一组值,但不能重复。<map>它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。<props>它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。你可以使用<list>或<set>来连接任何 java.util.Collection 的实现或数组。你会遇到两种情况(a)传递集合中直接的值(b)传递一个 bean 的引用作为集合的元素
spring 注入的类型相关课程
spring 注入的类型相关教程
- 1. 输入框的类型 在 HTML 中, input 标签表示输入框,而输入框有很多类型,比如普通文本输入框、密码框、邮箱框(只能输入邮箱格式的内容)、网址框(只能输入框网址格式的内容)、数字框(只能输入数字)、单选框、多选框等。我们可以改变 input 标签的 type 属性来显示不同的输入框类型。
- 2.2 Spring Security 和同类型框架的比较 Java 环境下有两大安全框架:Spring Security 和 Shiro。和 Spring Security 一样,Shiro 同样隶属于一个强大的软件社区: Apache。二者的功能类似,都完成了认证和鉴权功能,都有超过十年的发展历史。Shiro 是一个独立的安全框架,Spring Security 则与 Spring 关联紧密,所以在二者的选择上,可以简单的用如下原则区分:如果我们开发 Spring Boot 项目,那优先建议使用 Spring Security 安全框架。如果我们开发其他类型的项目,那请使用 Shiro 作为安全框架。Spring Security 安全框架适合为 Spring Boot 项目提供安全保护,所以如果您是个 Spring Boot 项目的开发人员,且正在寻找一种可以和 Spring Boot 轻松集成的,用于认证和鉴权的框架时,可以优先考虑 Spring Security。
- 4.2 注入 OutputStream 在控制器的方法中注入 OutputStream 对象,只需要在方法中添加参数声明。如下实例:可使用 OutputStream 对象读取指定文件中的内容后直接响应给浏览器。@RequestMapping(value = "/testApi05")public void hello(OutputStream outputStream) throws IOException { Resource res = new ClassPathResource("/test.txt"); FileCopyUtils.copy(res.getInputStream(), outputStream);}test.txt 文件的内容是”this is a test’。文件直接放在项目的 src/main/java 目录下。在浏览器中输入请求路径 http://localhost:8888/sm-demo/testApi05 。你将在浏览器中看到:有句话叫做 “条条道路通罗马”,用在 Spring MVC 中真的是合适,依靠 Spring 强大的注入功能,只要原生开发中能有的对象基本上都能注入进去。
- 2.1 注解分类介绍 按功能划分:创建对象: 对应的就是在 xml 文件中配置的一个 bean 标签,可以定义 id、name、class 等属性;注入数据: 对应的就是在 bean 标签下,使用 property 标签给类中的依赖属性赋值;作用范围: 对应的就是设置 bean 标签的 scope 属性,不设置默认也是单例;生命周期: 对应的就是设置 bean 标签的 init-method 和 destroy-method 方法。2.1.1 创建对象的注解介绍从 Spring 的官网得知一段话:@Repository 注释是针对满足的存储库(也被称为数据访问对象或 DAO)的作用,或者固定型的任何类的标记。也就是说,我们上一节中使用的注解,一般用于 dao 层使用。那么,我们都知道,JAVAEE 体系结构,一般开发分为三个层级:表现层: 主要作用为处理数据生成静态的页面响应给浏览器展示 ;业务层: 主要作用为业务逻辑代码编写,数据的获取,数据的封装返回等等操作都在这里;持久层: 主要作用为跟数据库打交道,对于数据的持久化操作等。那么,如果是创建的表现层或者业务层代码,应该使用什么注解呢?好了,看一下创建对象注解的划分:@Component :一般用于通用组件的类上使用的注解;@Service : 一般用于业务层类上使用的注解;@Controller : 一般用于控制层类上使用的注解;@Repository :一般用于持久层类上使用的注解。官网解释:Spring 提供进一步典型化注解:@Component,@Service,和 @Dao。@Component 是任何 Spring 托管组件的通用构造型。@Repository,@Service 和 @Controller 是 @Component 针对更特定用例的专业化(分别在持久性,服务和表示层)。慕课解释:@Component 注解是 Spring 框架中通用的一个注解,用于组件扫描实例化对象使用, 那么其余的三个注解 @Controller ,@Service,@Repository 都是 @Component 注解的衍生注解,作用跟 @Componet 注解的作用一致。那么意义在于, 三个注解,对应的是三个开发层级 ,一般来讲我们将 @Controller 作为表现层的使用,@Service 作为业务层的注解,@Repository 作为持久层使用的注解。我们下面通过案例演示一下。
- 2.3 注解注入规则 刚刚通过三个注解都可以完成了 bean 的实例化注入,通过测试代码也获取到了容器中的三个对象实例,那么这里不知道大家是否发现一个问题:我们知道,Spring 这个容器本质是个 map 集合来存储实例化后的对象。既然是个 map 集合,就应该对应的有 key 和 value。我们都知道 value 肯定是实例化后的 bean ,那么 key 是什么呢?注入规则:1. 四种注解都支持 value 的属性作为自定义的 bean id ;2. 如果 value 属性没有指定,那么默认以类的简单名称(类名首字母小写)作为 bean 对象的 id。所以我们可以看到:当我们只使用注解没有自定义 id 的时候可以通过,每个类的首字母小写来获取对象实例,那么如果有了自定义的 id,上述代码是否继续可用呢?自定义 id 获取实例:改造类上面的注解,设置自定的 id,更改的注解如下:@Controll("uc")@Service("us")@Repository("ud")测试结果:测试结果:为了区分测试结果,我在测试代码中,只修改了 controller 的获取方式,将 id 改成了 uc 。service 和 dao 并没有修改。从控制台打印可以看到,只有 controller 对象可以成功获取,service 和 dao 都失败了,因为我们已经使用了自定义的 id,所以容器中没有默认的以类名作为 id 的 bean 对象实例。
- 2.2 @Autowired 注解 1. 为了测试效果,我们创建 Service 和 Dao 两个类, Dao 作为 Service 的依赖。代码如下://service实现类的代码@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public void saveUser() { System.out.println("执行service中的保存逻辑"); }}//dao实现类的代码@Repositorypublic class UserDaoImpl implements UserDao { public void saveUser() { System.out.println("执行dao的保存方法"); }}代码解释:上面代码可以看到,两个类的实例化方式都是通过注解注入到容器, 并且在 service 实现类中的 userDao 属性上面加了注解 @Autowired。我们首先测试下:能否通过这个注解,实现依赖注入,另外再测试下它是否是按照类型注入。2. 配置文件的内容为注解实现 IoC。配置文件解释: 注解实现 IoC 的章节说过,需要通过组件扫描来实例化容器。3. 编写测试代码public class SpringAnTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); UserService userService = context.getBean(UserService.class); userService.saveUser(); }}测试结果:结果解释可以看到 service 中的代码执行,并且通过 dao 的示例调用的方法也执行了,那么说明 @Autowired 注解实现了属性 userDao 的注入。当然这种操作是小儿科,没有一个同学觉得他有什么。 我们验证下它的特点:set 方法我们是省略了,那么它是否按照类型注入的呢?如果我们的实现类中有多个 userDao 接口的实现类呢,又该如何呢?4. 添加 UserDaoImpl2 一样实现 userDao 的接口,代码如下:@Repositorypublic class UserDaoImpl1 implements UserDao { public void saveUser() { System.out.println("执行dao1的保存方法"); }}测试结果结果解释:可以看到上面控制台打印的异常堆栈信息,清楚的提示错误原因,没有指定的 bean 实例 UserDao 类型的,期待单个 bean 匹配,但是找到了两个。一个是 userDaoImpl 一个是 userDaoImpl1。看到这可以证明: @Autowired 注解是按照类型注入,如果匹配的类型多了就会报错。疑问导出:难道使用了 Spring 框架以后,我们的接口只能有一个实现类吗? 当然不可能,毕竟我们看 Spring 的源码的时候 已经看到了,很多的接口对应一大堆的实现类。那么,针对这种多个接口实例的情况,怎么解决的呢?继续我们注解的学习。
spring 注入的类型相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议