Spring是一个开源的、轻量级的框架,spring也是一个一站式的框架。它可以使用JavaBean来代替EJB。Spring的两个核心部分是(控制反转)和(面向切面)。
1、轻量
2、控制反转(IOC):促进了低耦合。当应用了IOC,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IOC和JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它(即Java的反射原理)。
3、面向切面(AOP):允许通过分离应用的业务逻辑与系统及服务进行内聚性开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已,它们并不负责(甚至是意识)其他的系统级关注点,例如日志或事物支持。简单来说就是扩展功能而不是修改源代码。
4、一站式:Spring在Java EE三层结构中,每一层都提供了不同的解决技术。
web层:使用SpringMVC 技术
service层:使用Spring的IOC技术
DAO层:使用Spring的jdbcTemplate技术
1、xml配置文件
2、工厂设计模式
3、dim4j(开源XML解析包)解析xml
4、Java反射原理
第一步、创建xml配置文件,配置需要自动创建的对象类(被依赖的对象类)
例如:
第二步、创建工厂类,使用dom4j解析配置文件信息 + 使用反射原理。在工厂类中通过dom4j解析xml文件,根据id值(userService)得到id值对应的class的属性值,然后根据反射原理创建类的对象。
例如:
//创建一个工厂类,使用dom4j解析配置文件 + 使用反射创建类的对象
public static UserService getService(){
//使用dom4j解析XML文件
//根据id值“userService”,得到id值所对应的class属性值
String classValue="class属性值";
//使用反射原理创建类的对象
Class clazz=Class.forName(classValue);
//创建类的对象
UserService service = clazz.newInstance();
return service;
}
1、创建配置文件步骤一:spring的配置文件的文件名称和位置不是固定的(但是官方建议放到src文件夹下面,并且名称为 applicationContext.xml)。
2、创建配置文件步骤二:引入schema约束(路径:D:\eclipse\Spring\spring-framework-4.3.6.RELEASE-dist\spring-framework-4.3.6.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html)。
3、创建配置文件步骤三:配置依赖类的Bean。(
在联网的情况下,会通过配置文件中的schema约束的链接给予提示,如果断网则有以下方法向eclipse中引入约束:
1、可以通过把约束文件引入到eclipse中:在eclipse —》window—》Preference—》搜索XML Catalog —》Add —》location中输入(D:\eclipse\Spring\spring-framework-4.3.16.RELEASE-dist\spring-framework-4.3.16.RELEASE\schema\beans\spring-beans-4.3.xsd)—》 Key中输入(http://www.springframework.org/schema/beans/spring-beans.xsd)—》点击OK。
2、在有网的时候敲一遍提示的代码,断网之后也可以出现提示。
1、Bean的实例化是指在spring中通过配置文件创建对象
2、Bean实例化的三种方式
第一种:使用类的无参数的构造方法(若要实例化的类没有无参的构造方法,则会出现异常);
第二种:使用静态工厂创建(创建静态方法,返回类对象)
第三种:使用实例工厂创建(创建不是静态的方法,返回类对象)
(1)id:代表唯一的Bean,不能包含特殊符号
(2)class:需要创建对象的所在类的全路径
(3)name:功能和id是一样的,但是name可以包含特殊符号(不常用了)
(4)scope:有五个属性值:
singleton(默认的,表示单实例的)
例如:
prototype(表示多实例的)
例如:
request(表示在web项目中创建Bean对象存入到request域中)
session(表示在web项目中创建Bean对象存入到session域中)
globalSession(表示在web项目中,应用在porlet环境,如果没有porlet环境则与session的作用一样)
概念:创建对象时,给类中的属性也设置值
public class User{
private String name;
public void setName(String name){
this.name=name;
}
}
User user=new User();
user.setName("花岗岩");
public class User{
private String name;
public User(String name){
this.name=name;
}
}
User user=new User("花岗岩");
public interface Dao{
public void delete(String name);
}
public class DaoImpl implements Dao{
private String name;
public void delete(String name){
this.name=name;
}
}
在Spring中只支持前两种注入方法。
1、创建一个有构造方法的类
public class PropertyDemo1 {
private String name;
//使用参数构造方法注入
public PropertyDemo1(String name) {
this.name = name;
}
public void testProperty() {
System.out.println("Demo1........"+name);
}
}
2、在XML文件中配置该类的Beans实例
1、创建一个有set方法的类
public class PropertySet {
private String bookName;
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void demobook() {
System.out.println("bookName is: "+bookName);
}
}
2、在XML文件中配置该类的Beans实例
1、在需要属性的类中创建一个其他类类型的属性(例如在User类中创建一个Book类型的属性);
2、生成返回值为其他类类型的set方法(例如public Book setBook(){});
UserDao的代码段如下:
public class UserDao {
public void add() {
System.out.println("UserDao.......");
}
}
UserService的代码段如下:
public class UserService {
//定义UserDao类型的属性
private UserDao userDao;
//创建set方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add() {
System.out.println("Service.......");
//现在需要在UserService中得到UserDao的对象
userDao.add();
}
}
XML的配置内容如下:
1、引入p名称空间:(xmls:p="http://www.springframework.org/schema/p")这就是一个名称空间;
2、使用p名称空间的两种格式:
普通类型属性的使用格式为(p:属性名称="具体属性值");
对象类型属性的使用格式为(p:属性名称-ref="具体属性值");
例如:
1、复杂类型包括:数组、list集合、map集合、properties类型
具体实例代码如下:
类的定义:
public class PersonPName {
private String pName;
public void setpName(String pName) {
this.pName = pName;
}
private String[] arr;
private List list;
private Map map;
private Properties properties;
public void setArr(String[] arr) {
this.arr = arr;
}
public void setList(List list) {
this.list = list;
}
public void setMap(Map map) {
this.map = map;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void testPName() {
System.out.println("Person......."+pName);
System.out.println("数组是: "+arr);
System.out.println("List集合是: "+list);
System.out.println("Map集合是: "+map);
System.out.println("Properties是: "+properties);
}
}
配置文件的内容:
黄光裕
高原红
符桂花
盛大
符泛
户会
安徽合肥
北京朝阳
成都魔都
1、IOC(控制反转)表示把对象的创建交给Spring进行配置
2、DI(依赖注入)表示向类中的属性中注入设置值
3、两者的关系:DI不能单独存在,需要在IOC的基础之上完成操作,
1、虽然使用代码ApplicationContext apl=new ClassPathXmlApplicationContext("bean.xml")的方式创建对象可以实现功能,但是效率很低。
2、Spring整合Web项目的思想:让加载配置文件和创建对象的过程在服务器启动阶段完成。
3、实现具体原理:
(1)使用ServletContext对象
(2)监听器(ServletContextListener)监听ServletContext对象的创建
(3)具体使用:
——在服务器启动的时候,为每个项目创建一个ServletContext对象;
——在ServletContext对象创建的时候,使用监听器可以具体的监听到ServletContext对象在什么时候创建;
——使用监听器监听到ServletContext对象创建的时候,会加载Spring的配置文件,创建配置文件中的实例;
——把创建的实例存放到ServletContext域对象里(使用setAttribute方法);
——获取配置文件中的实例时,到ServletContext域中得到(使用getAttribute方法);