一,什么是IOC的核心功能?
IOC:Inversion of Control 控制反转. 指的是 对象的创建权反转(交给)给Spring.作用是实现了程序的解耦合.解决程序耦合性高的问题。
二,配置
(1)引入Spring的开发包如下:(此处提供网盘下载,若失效请留言:链接:https://pan.baidu.com/s/1Uk_-NtKRviwyYUgubyFvPw 密码:fin3)
(2)解压进入后可看到libs下有60个jar包,那么Spring项目的最基本的核心的必须要的jar包需要哪些呢?如下:
(最基本jar包:链接:https://pan.baidu.com/s/1hibDJmNlL-vODQ9S9Usjvw 密码:vypt)
(3)引入日志相关配置文件:log4j.properties 放在src目录下
(链接:https://pan.baidu.com/s/128_I5Z3siKDNRu_RVM5e4w 密码:x6u2)
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout
举例如下:ctrl+1引入Junit4
结果如下:
(4)引入applicationContext.xml文件如下:
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--自行配置bean标签-->
</beans>
(5)编写接口:
package itheima;
public interface userservice {
public void sayhello();
}
编写相关的类
package itheima;
import org.apache.log4j.Logger;
public class userserviceimpl implements userservice {
Logger log=Logger.getLogger(userserviceimpl.class);
@Override
public void sayhello() {
System.out.print("Hello world");
log.info("执行了sayhello函数");
}
}
完成xml文件的配置bean:
<!-- 使用bean标签 -->
<bean id="userservice" class="itheima.userserviceimpl" />
编写测试类:
//使用接口的方式
@Test
public void C() {
//创建工厂,加载核心配置文件
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
//从工厂中获取到对象
userservice usi=(userservice) ac.getBean("userservice");
//调用对象的方法执行
usi.sayhello();
}
输出结果:
例子体现了Spring的基础IOC:控制反转,将对象的创建权交给了Spring.在这个过程中,我们由“主动创建”变成了“被动创建”,我们不需要了解如何创建及工作的,只需要关注如何描述。
这里我们阐述下控制反转的概念:
控制反转是一种通过描述(在Java中可以是XML或注解)并通过第三方去产生或获取特定对象的方式。
Spring会提供IOC容器来管理对应的资源,当各个模块接口开发好之后,就可以将其服务发布到SpringIOC的容器里,这个时候你只需要过程描述得到对应的功能接口,就可以完成对应的功能操作了。可见SpringIOC容器带来许多使用的便利。
这就是控制反转的理念,其好处在于降低对象之间的耦合。