您的位置:首页 > 编程语言 > Java开发

Spring初体验第一天--IOC

2018-03-20 17:54 190 查看
第一天学习spring,讲的是spring中的IOC控制反转。顾名思义,就是将对象的创建权力反转给Spring框架,这样做的好处是降低代码的耦合性。之前我们的做法是自己创建对象,调用方法,假如后面我们发现这个类不符合我们的要求了,我们需要重新写一个类,并且要修改源代码来调用这个新的类,耦合性很高,违反了设计原则的开闭原则。IOC就是spring帮我们创建对象,而创建哪个对象则是我们通过配置文件告诉spring的,这样如果重新写一个类,只需要修改配置文件,不需要修改源代码了。所以ioc降低了代码的耦合性,便于后期维护。要实现IOC需要依赖配置文件与创建对象的工厂类。栗子中的spring使用的是4.2.4.RELEASE版本。首先看一下创建对象的工厂类,它是通过反射的方式创建对象的。//推荐使用的方法,使用相对路径的配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");还有一个是获取绝对路径的配置文件创建的方法,还有一个过时的方法,使用的是:BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));过时方法,不推荐使用。再来看一下配置文件:<bean id="UserDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>id要保证唯一,class里面是要实例化的类的全名,代码会在最后贴出来。上图展示了3种创建的方法,基本都是使用默认的方法。bean标签中还有一个参数。scope,作用域。最常用的是单例,不需要配置。singleton:单例(默认值)prototype:多例,在Spring框架整合Struts2框架的时候,Action类也需要交给Spring做管理,配置把Action类配置成多例!!request:应用在web应用中,将创建的对象存入到request域中。session:应用在web应用中,将创建的对象存入到session域中globalsession:应用在porlet环境下使用。将创建的对象存入到全局的session中。pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion><groupId>com.itheima</groupId><artifactId>springtest1</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>springtest1</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.7</source><target>1.7</target><encoding>utf-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.7.1</version><configuration><argLine>-Dfile.encoding=UTF-8</argLine></configuration></plugin></plugins></build></project>
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" ><!-- 默认方法创建对象 --><bean id="UserDao" class="com.itheima.dao.impl.UserDaoImpl"></bean><!-- 静态方法创建对象 --><bean id="UserDao1" class="com.itheima.factory.FactoryDemo" factory-method="getInstance"></bean><!-- 实例化方法创建对象 --><bean id="factory" class="com.itheima.factory.FactoryDemo" ></bean><bean id="UserDao2" factory-bean="factory" factory-method="newInstance"></bean><!-- singleton:单例(默认值)prototype:多例,在Spring框架整合Struts2框架的时候,Action类也需要交给Spring做管理,配置把Action类配置成多例!!request:应用在web应用中,将创建的对象存入到request域中。session:应用在web应用中,将创建的对象存入到session域中globalsession:应用在porlet环境下使用。将创建的对象存入到全局的session中。-->
</beans>
FactoryDemo:public class FactoryDemo {public static Object getInstance(){return new UserDaoImpl();}public Object newInstance() {return new UserDaoImpl();}}UserDao 与 实现类public interface UserDao {void help();}
public class UserDaoImpl implements UserDao {@Overridepublic void help() {System.out.println("帮帮忙撒.....");}}
测试类:public class IOCTest1 {/*** 默认方法创建对象*/@Testpublic void test1(){ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = (UserDao)ac.getBean("UserDao");userDao.help();}/*** 静态方法创建对象*/@Testpublic void test2(){ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = (UserDao)ac.getBean("UserDao1");userDao.help();}/*** 实例化方法创建对象*/@Testpublic void test3(){ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = (UserDao)ac.getBean("UserDao2");userDao.help();}}log4j.properties:log4j.rootLogger=INFO,Console#debug,info,warning,error4jibie ConsoleAppender: output Console layout: output stylelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n### %d==> time %t==> thread %-5p ==>%p:shuchujibie 5:5gezifu -:zuoduiqi %c:shuchudeleidequanming %m:shuchufujiaxinxi %n:huanhanglog4j.logger.org.apache=INFO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring初体验-IOC