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协议加载