一、概念
1.IoC:控制反转
IOC容器
实现IoC思想,并提供对象创建、对象装配以及对象生命周期管理的软件;
IOC理解
应用程序无需主动new对象,通过配置描述应该如何创建对象即可
应用程序不需要主动装配对象之间的依赖关系,而是描述需要哪个服务,IoC容器会负责装配
主动变被动:别打电话给我,我会打给你
最少知识原则:应用程序不知道依赖的具体实现,只知道需要的服务接口(面向接口编程)
消费者不直接依赖于服务者,减少类间依赖
2.DI:依赖注入
二、代码
先看一下整体的项目结构:
1.web.xml
<span style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<!-- spring服务层的配置文件 -->
<!-- 配置spring.xml 说明spring配置文件位置和名称-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<!-- 配置Log4j.properties 说明日志配置文件位置和名称-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!-- 配置监听器 根据web服务器启动、停止事件,完成IoC容器加载和卸载功能-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app></span>
listener监听器:初始化spring的运行环境,加载spring的配置文件,然后解析配置文件中的内容。如果不配置listener就相当于再web容器启动时没有加载,spring就不工作了。
2.spring.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" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
>
<bean id="theAction" class="com.sict.model.LowerAction">
<property name="message">
<value>Hello:</value>
</property>
</bean>
</beans>
3.日志文件log4j.properties
属性文件log4j.properties是spring的功能日志,控制日志的输出
log4j.debug=true
log4j.rootLogger=DEBUG,CON
log4j.appender.CON=org.apache.log4j.ConsoleAppender
log4j.appender.CON.layout=org.apache.log4j.PatternLayout
log4j.appender.CON.layout.ConversionPattern=%d{MM-ddHH\:mm\:ss}[%c-%L][%t][%-4r] - %m%n
4.Action.java
log4j.debug=true
log4j.rootLogger=DEBUG,CON
log4j.appender.CON=org.apache.log4j.ConsoleAppender
log4j.appender.CON.layout=org.apache.log4j.PatternLayout
log4j.appender.CON.layout.ConversionPattern=%d{MM-ddHH\:mm\:ss}[%c-%L][%t][%-4r] - %m%n
package com.sict.model;
//定义接口类
public interface Action{
public String sayHelloTo(String name);
}
5.LowerAction.java
package com.sict.model;
//该类的功能是把字符串统一转换成小写
public class LowerAction implements Action {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String sayHelloTo(String name) {
// TODO Auto-generated method stub
return (getMessage()+name).toLowerCase();
}
}
6.UpperAction.java
package com.sict.model;
//该类的功能是把字符串统一转换成大写
public class UpperAction implements Action{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String sayHelloTo(String name) {
// TODO Auto-generated method stub
return (getMessage()+name).toUpperCase();
}
}
7.index.jsp
下面是page指令文件和body里边的代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.sict.model.*" %>
<%@ page import="org.springframework.web.context.*" %>
<%@ page import="org.springframework.web.context.support.*" %>
<body>
This is my JSP page. <br>
<%
String name=request.getParameter("name");
//如果姓名为空,默认名字为anna
if(name==null){
name="anna";
}
ServletContext servletContext=request.getSession().getServletContext();
WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(servletContext);
//getBean是用来获取spring.xml文件里bean的,()写的是bean的id
Action action=(Action)wac.getBean("theAction");
out.println(action.sayHelloTo(name));
%>
</body>
spring分别提供了用于启动WebApplicationContext的Servlet和Web容器监听器:
org.springframework.web.context.ContextLoaderServlet;
org.springframework.web.context.ContextLoaderListener.
这两个方法都是在web应用启动的时候来初始化WebApplicationContext
我们如果要使用WebApplicationContext则需要从ServletContext取出,Spring提供了一个WebApplicationContextUtils类,可以方便的取出WebApplicationContext,只要把ServletContext传入就可以了。
8.部署完tomcat启动运行结果如下
不给name赋值运行结果:
给name赋值后运行结果:
9.所需jar包
10.基本思路
①导入相应的jar包
②配置web.xml文件
③配置spring.xml文件
④日志文件
⑤写相应的功能