运行环境:Windows 10 专业版 1803
JAVA版本:1.8
IDE:IntelliJ IDEA 2018.3.4
一切正常运行,但是不难发现如果用 实现类 变量名=new 实现类 的方式,不易于扩展,我们如果需要改用该实现类接口下的其他实现类的功能,则需要改动原代码,所以这里我们使用了接口 变量名=new 实现类 的方式(运用了多态),这样易于了扩展,只要改动后面的实现类名就行,但是仍然需要改动源代码,也就是存在着耦合性,那么现在Spring出现了,它的IOC和DI解决了紧耦合的问题,实现了松耦合(底层实现方式是工厂模式+反射+配置文件),让我们继续吧!(以下将改造如上的代码,需要一定的Spring入门知识)
本章我们只使用了IOC功能,所以需要beans,core,context,expression这四个包来支持
Spring在加载的过程中会加载commons-logging.jar日志包,所以我们需要导入这个jar包,否则运行会报错,建议同时导入apache–log4j.jar日志包,因为在企业中用的最多的记录日志jar包就是log4j.jar,当两个jar包都导入时,会自动启用log4j.jar包来记录日志,只有logging.jar包时就只用自身来记录日志.其中logging.jar是必须存在的.
在src下面有创建一个Spring配置文件:applicationContext.xml
同时在该目录下创建一个日志配置文件:log4j.properties
log4j.properties文件内容:
### 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' ###
# error warn info debug trace
log4j.rootLogger= info, stdout
applicationContext.xml文件内容
接下来配置本地约束文件(即可在不联网的状态下IDE会提供提示) 为了不让篇幅过长,可参考本博主的另外一篇文章
首先开始编写配置信息
bean标签: 指定要实例化的对象
id属性: 唯一标识 可以为任意值 但是整个xml唯一
class属性: 类的全限定名 就是通过它反射该类的实例对象
利用以下代码在Service层调用Spring api来获得UserDaoImpl类的对象并运行其save方法
测试成功!(如有
log4j:WARN No appenders could be found for logger(org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
的异常请移步本博主另一篇文章)
Service层我们改成利用属性来调用,在未使用Spring时我们是无法在Web层改变Service层的属性值的,因为之前我们是利用多态的特性来创建该层对象,接口是没有属性的.但是现在有了Spring,我们可以利用它的DI(依赖注入)来实现此功能,我们首先提供属性和相应的set方法(必须).
再次编写Spring配置文件
因为使用的是set属性注入,条件是类的属性需要有set方法,我们以如下格式编写
以上如果是基本类型和String用value
对象类型用ref
以之前的套路,这次在Web层调用Spring API来获得UserServiceImpl类的对象并运行其save方法
大功告成!改造就这样完美的结束了.
Spring框架真的很强大,虽然以我现在的水平只能靠想象来脑补它的强大,但是我会不断深入学习它,了解它,希望与有缘读到我这篇文章的你共勉!