Spring IOC 配置详解

1 IOC概述 1.1 IOC概念

IOC中文是控制反转,即是某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定。从而解除了某一接口对实现类的直接依赖。

1.2 IOC类型

主要分为构造函数注入,属性注入,接口注入

构造函数注入

public class Bar { private Foo foo; public Bar(Foo foo) { this.foo = foo; } }

属性注入

public class Bar { private Foo foo; public void setFoo(Foo foo) { this.foo = foo; } }

接口注入

public interface BarInterface { void setFoo(Foo foo); } public class Bar implements BarInterface { private Foo foo; public void setFoo(Foo foo) { this.foo = foo; } }

此种方式和属性注入没有明显区别,但是却增加了一个接口,这不利于项目后期的维护,因此不建议使用!

1.3 spring的IOC配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans "> <bean id="foo" class="org.acy.di.Foo"/> <bean id="bar" class="org.acy.di.Bar"> <property name="foo" ref="foo"/> </bean> </beans> 2 spring的资源访问 2.1 资源抽象接口

Spring的Resource接口,使应用访问底层资源更加便捷。
主要方法:
-boolean exists() 是否存在
-boolean isOpen()
-URL getURL()
-File getFile()
-InputStream getInputStream()

这个接口下面主要的实现类有:

ByteArrayResource:内存资源

ClassPathResource:类路径下的资源

FileSystemResource:文件系统资源

InputStreamResource:输入流资源

ServletContextResource:Web容器上下文资源

UrlResource:远程资源

测试1

public class FileSourceExample { public static void main(String[] args) { String filePath = "C:\\Users\\Administrator\\IdeaProjects\\spring\\c03\\src\\main\\resources\\1.txt"; Resource resource1 = new FileSystemResource(filePath); System.out.println(resource1.getFilename()); Resource resource = new ClassPathResource("1.txt"); System.out.println(resource.getFilename()); } }

测试2

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% Resource resource = new ServletContextResource(application, "/WEB-INF/classes/1.txt"); %> <%=resource.getFilename()%> <%=WebUtils.getTempDir(application).getAbsolutePath()%> </body> </html>

测试3

public class EncodedTest { public static void main(String[] args) throws IOException { Resource resource = new ClassPathResource("1.txt"); EncodedResource encodedResource = new EncodedResource(resource,"utf-8"); String s = FileCopyUtils.copyToString(encodedResource.getReader()); System.out.println(s); } }

注:资源加载时默认采用系统编码读取资源,如果需要转码,可用EncodedResource

2.2资源加载

资源地址表达式

classpath: 从类的跟路径加载

file: 从文件路径

http: http协议

ftp: ftp协议加载

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2f81fa72595e7a712a8d1ef574b64122.html