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和SpringMVC父子容器关系初窥一、背景 最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和SpringMVC的父子容器关系并且给出Spring和SpringMVC配置文件中包扫描的官方推荐方式。二、概念理解和知识铺垫 在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。 我们可以使用统一的如下注解配置
-
Spring和SpringMVC父子容器关系初窥一、背景最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和SpringMVC的父子容器关系并且给出Spring和SpringMVC配置文件中包扫描的官方推荐方式。二、概念理解和知识铺垫在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。我们可以使用统一的如下注解配置来对Bean
-
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 父类 注入相关课程
spring 父类 注入相关教程
- 4. 类索引与父类索引 定义:类索引(this_class)和父类索引(super_class)都是一个 u2 大小的数据。类索引:确定当前类的全限定名。父类索引:确定当前类的父类的全限定名。Tips:由于 Java 单继承的原则,父类只可能有一个;由于 Object 是所有其他类的基类,所以除了 Object 类没有父类以外,其余所有类的 super_class 都不为空。无符号数结构示意图:类索引是紧跟在访问标志之后的结构,类索引后边紧跟的结构是父类索引。由于类索引与父类索引关系非常紧密,都是描述的当前类以及当前类的父类的全限定名,所以此处我们将二者放在一起进行讲解。
- 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 强大的注入功能,只要原生开发中能有的对象基本上都能注入进去。
- 5.3 调用父类方法 有时候我们不想完全重写父类方法,可以使用 super 关键字调用父类方法,调用父类方法的语法为:super.方法名(参数列表)例如,Cat 类调用父类 Pet 的 eat 方法:class Pet { public void eat() { System.out.println("宠物吃东西"); }}class Cat extends Pet{ public void eat() { // 在 eat 方法中调用父类 eat 方法 super.eat(); System.out.println("小猫饭量很小"); }}class Test { public static void main(String[] args) { Cat cat = new Cat(); cat.eat(); }}运行结果:宠物吃东西小猫饭量很小
- 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 方法的名称一致
- 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 对象实例。
- 5.2 调用父类属性 子类中可以引用父类的成员变量,语法为:super.成员变量名例如,在 Dog 类中调用父类的成员变量 birthday:class Pet { protected String birthday;}class Dog extends Pet { public Dog() { System.out.println("宠物生日:" + super.birthday); }}
spring 父类 注入相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议