- 体系结构
- String框架上下文对象
- 多个spring配置文件
- 配置管理bean对象
- 注解
- log4j
- 基本配置
IOC(Inversion Of Control)控制反转
spring上下文是spring framework运行时在JVM中使用的内存区域
spring上下文必需在使用前首先创建
spring上下文最核心的作用是创建、管理应用程序中的Bean对象
BeanFactory接口是spring上下文的顶级接口
BeanFactory子接口:
ApplicationContext:非Web应用Spring上下文接口(键结集成BeanFactory)
WebApplicationContext:Web应用spring上下文接口(直接继承ApplicationContext)
这次我们用maven来配置String
一般项目,要配置String应该要导入20多个jar包,用maven可以下载到仓库,具体教程参考这篇博文
在这篇博文基础上,我多下了个spring-web
maven的pom.xml
4.0.0 org.example springBasic 1.0-SNAPSHOT springBasic http://www.example.com UTF-8 1.7 1.7 5.0.10.RELEASE junit junit 4.11 test org.springframework spring-expression ${springVersion} org.springframework spring-core ${springVersion} org.springframework spring-beans ${springVersion} org.springframework spring-context ${springVersion} org.springframework spring-web ${springVersion} maven-clean-plugin 3.1.0 maven-resources-plugin 3.0.2 maven-compiler-plugin 3.8.0 maven-surefire-plugin 2.22.1 maven-jar-plugin 3.0.2 maven-install-plugin 2.5.2 maven-deploy-plugin 2.8.2 maven-site-plugin 3.7.1 maven-project-info-reports-plugin 3.0.0
web.xml配置上下文加载路径和Spring监听接口
contextConfigLocation classpath:com/model/conf/spring/ApplicationContext.xml org.springframework.web.context.ContextLoaderListener
其中,ApplicationContext是自己创建的,根据那篇博文,maven下载好后可以直接创建。
如果spring的监听找不到,原因可能是包没有导到位,这里应该是spring-web包,可以在下图位置将相关包加到lib路径下
在原有的基础上,又多建了一个
web.xml配置
contextConfigLocation
classpath:com/model/conf/spring/ApplicationContext.xml,
classpath:com/model/conf/spring/spring-client.xml
第二种方法:
在ApplicationContext.xml用import导入
配置管理bean对象
bean常用属性:
id:bean对象在spring上下文中的唯一标识
name:bean对象别名,可有多个
class:bean对象的类型名称
scope:bean对象的存储范围
autowire:bean对象注入方式
init-method:bean对象在创建时调用的初始化方法名称
depends-on:bean对象所依赖的对象名称
lazy-init:设置典型是否延迟初始化
constructor-arg:创建bean对象使用的有参构造器参数设置,常用属性:index,ref,type,value
property:
设置bean对象成员属性
常用属性:nane,ref,value
在xml文件中
首先创建一个Bean类Person及其依赖注入类Printer
Person.java
package com.model.user;
public class Person {
private String name;
private int age;
private String sex;
private Printer printer;
public Printer getPrinter() {
return printer;
}
public void setPrinter(Printer printer) {
this.printer = printer;
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Person() {
}
public void init(){
System.out.println("调用init初始化方法");
this.name = "liang";
this.age = 22;
this.sex = "男";
}
}
Printer.java(用于测试,先不写内容)
package com.model.user;
public class Printer {
}
ApplicationContext.xml
init是初始化方法,表示创建时就调用;depend-on属性为依赖注入类的名称;在Person类下,其依赖注入类Printer要有set方法。
构造子方式注入bean对象
完善上面的printer类,并加上Ink类
package com.model.user;
public class Printer {
private Ink ink;//依赖的Ink类型javabean对象
public Printer(Ink ink) {
System.out.println("构造器方式注入依赖的bean对象");
this.ink = ink;
}
public Printer() {
}
public void printFile(){
System.out.println("正在打印" + ink.getColor());
}
}
package com.model.user;
public class Ink {
private String color;
public Ink(String color) {
this.color = color;
}
public Ink() {
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
在xml中
注解
使用注释标识java类
@Conponent javabean通用注释,涵盖所有类型bean,应用在类上
@Repository 数据处理层组件注释,应用在类上,通常标识Dao组件
@Service 服务层组件注释,应用在类上,通常标识控制器组件
@Controller 控制层组件注释,应用在类上,通常标识控制器组件
@Lazy 是头延迟初始化注释,应用在类上
@DependsOn 设置依赖的组件集合注释,应用在类上
以上都应用在类上
@Resource 设置依赖bean注释,应用在属性或set方法上
@Autowired 设置按类型自动注入依赖bean注释,应用在属性或set方法上
@Scope 设置bean的作用域范围,应用在类上
@Value 设置属性默认初始值,应用在属性或set方法
例子:
使用@Repository,UserDao.java,其相关的IUserDao不列出来了
package com.model.dao;
import org.springframework.stereotype.Repository;
@Repository(value = "UserDaoBean")
public class UserDao implements IUserDao {
@Override
public void addUser() {
System.out.println("向数据库存入User");
}
}
service层
package com.model.server;
import com.model.dao.IUserDao;
import com.model.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("UserServiceImpBean")
public class UserServer implements IUserServer{
@Autowired
private IUserDao userDao;
@Override
public void addUser() {
new UserDao().addUser();
}
}
@Autowired 保证当前spring上下文中只有一个此类型的bean对象
servlet:
package com.model.controller;
import com.model.server.IUserServer;
import com.model.server.UserServer;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class UserController extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
IUserServer userServer = (UserServer)context.getBean("UserServiceImpBean");
userServer.addUser();
}
}
结果:
@Resource注入方式
在原有代码加入SystemDaoImp
package com.model.dao;
import org.springframework.stereotype.Repository;
@Repository(value = "SystemDaoImp")
public class SystemDaoImp implements ISystemDao {
@Override
public void systemAction() {
System.out.println("系统操作~~~");
}
}
在UserServer.java中添加该类
@Resource(name = "SystemDaoImp")
private ISystemDao systemDaoImp;
并且加以判断是否注入
System.out.println("判断systemDaoImp是否注入" + (systemDaoImp == null));
结果为false,不为空,表示注入成功
@Resource有name和type属性,如果未设置 name属性值,也未设置type属性值,则首先按照默认字段名称查找,道道直接注入,找不到则按照type方式类型查找,如果找到则注入;找不到或找到一个以上则输出异常。
是Apache一个开源项目,提供系统日志的管理服务,以AOP模式切入到应用当中。
组成:
属性设置:
.Xml文件配置
.properties文件配置
Logger日志级别
用来表示输出什么样的日志信息
8个级别从低到高:ALL,TRACE,DEBUG,INFO,OFF,FATAL,ERROR,WARN
Appender输出源
Appender接口定义日志信息输出的目的地
ConsoleAppender 输出到控制台
FileAppender 输出保存为目标日志文件
DailyRollingFileAppender 每日商城一个日志文件
RollingFIleAppender 文件到达指定尺寸产生新文件
WriterAppender 日志信息以流格式发送到指定的地方
Layout日志信息输出格式
Layout抽象类定义以什么样的格式输入日志信息
PatternLayout 自定义格式
SimpleLayout 包含信息级别、信息字符串
HTMLLayout html表格式布局
TTCCLayout 时间、线程、类别等信息
PatternLayout的属性ConversionPattern用来设置日期时间输出格式



