spring 无法注入
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring 无法注入内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring 无法注入相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring 无法注入相关知识
-
Spring--依赖注入 or 方法注入 ?依赖注入 我们在 [Spring — 循环依赖]中谈到 Spring 的两种依赖注入方式 构造器注入 属性注入(setter注入也归属于此) @Service public class HelloService { /** * 属性注入 */ @Autowired private BeanFactory beanFactory; /** * 构造器注入 */ public HelloService(ApplicationContext applicationContext) { } /** * 属性注入 * */ @Autowired public void setEnvironment(Environment environment) { System.out.println(""); } } 关于构造
-
(四)Spring从入门到入土——依赖注入(DI)Dependency Injection 概念 依赖注入(DI) 依赖:指Bean对象的创建依赖于容器。Bean对象的依赖资源 注入:指Bean对象 注入方式 一共有三种:分别是构造器注入;Set注入;P命名和C命名注入 构造器注入 在Spring从入门到入土——快速上手Spring中Beans.xml中有详细介绍,即通过有参构造来创建 <?xml version="1.0" encoding="UTF-8"?> Set注入(无参构造器) 要求被注入的属性必须有set方法,set方法的方法名由set + 属性首字母大写 , 如果属性是boolean类型 , 没有set方
-
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 无法注入相关教程
- 4.1 注入 InputStream 在控制器的方法中声明 InputStream 作为入参,Spring MVC 就能注入你想要的 InputStream 对象。@RequestMapping(value = "/testApi04",method = RequestMethod.POST)public void hello(InputStream inputStream) throws IOException { byte[] buff=new byte[128]; int read= inputStream.read(buff); System.out.println(new String(buff,0,read));}上面的实例,能读取到请求包中的数据,但过于低级,可读性并不是很好。Tips: 控制器方法的映射机制有只接受 POST 方法的限制,如果是 GET 方法的请求包,直接使用 InputStream 对象无法获取到请求包中的数据。GET 方法的请求数据是附加在 URL 上的,InputStream 只能读取实体部分的数据。
- 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. 依赖注入案例 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 方法的名称一致
- 3.1 EnableHystrix 注解详解 @EnableHystrix 注解是在 Spring Cloud 框架中使用 Hystrix 的基础必须注解,即如果想要在 Spring Cloud 框架中使用 Hystrix ,就必须要先声明 @EnableHystrix 注解,来告诉 Spring Cloud 框架,你要在其中使用 Hystrix 了。EnableHystrix 注解是作用在类上的注解,该注解没有任何参数,可以理解为,只是一个在 Spring Cloud 框架中来开启或关闭 Hystrix 的开关,具体用法我们看以下代码。@EnableHystrixpublic class DemoApplication { // 现在,同学们不需要理解main方法,重点看所使用的注解即可 public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}代码解释:第 1 行,我们将 @EnableHystrix 注解放到了 Spring Boot 项目的启动类上,这就表示,我们开启了 Hystrix ,即我们可以在项目中使用 Hystrix 了。Tips: 在 Spring Boot 项目中,如果想使用 Hystrix ,就一定先要在项目的启动类上,添加上述注解,否则,即使将 Hystrix 的依赖引入到了项目中,也无法使用 Hystrix 及任何功能特性。
- 4.3 集成 Spring 容器 其实,在真实开发项目当中,一般都是把 Handler 直接交给 Spring 容器进行管理,也就是说在 Handler 类上添加 Spring 提供的 @Component 注解即可。主要目的:统一把 Handler 交给 Spring 来管理;Handler 一般都是需要和底层的数据库进行交互的,真实项目当中一般都是使用 Spring 来管理 ORM 组件,如果 Handler 不交给 Spring 管理,那么操作数据库的时候就会相对麻烦。实例://交给Spring容器管理@Componentpublic class ServerLoginHandler extends ChannelInboundHandlerAdapter { //注入dao @Autowired private UserDao userDao; @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { }}@Autowiredprivate ServerLoginHandler serverLoginHandler;//这里无需再创建,只需要传递实例即可ch.pipeline().addLast(serverLoginHandler);
- 2. Spring Boot 是如何启动的 Spring Boot 项目生成后,只有简简单单一个类,简单优雅,赏心悦目!实例:@SpringBootApplicationpublic class SpringBootHelloApplication { public static void main(String[] args) { SpringApplication.run(SpringBootHelloApplication.class, args); }}我们来分析下这段代码, public static void main 是普通的 main 方法,是程序执行的入口。SpringApplication.run 看字面意思就知道,这是 Spring 应用的启动方法,运行该行代码后, Spring 应用就跑起来了。这个方法有两个参数, args 是命令行参数,此处没啥作用;另一个参数是 SpringBootHelloApplication.class ,包含类的信息。这个类有啥信息啊?放眼看去,除了一个类名、一个静态方法外,并无其他。凭这些信息就能启动 Spring 应用?等等,好像还有一个注解 @SpringBootApplication ,该注解是标注在类上的,属于类的信息。嗯,看来 Spring Boot 启动的秘密就在这个注解上了。
spring 无法注入相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议