Spring学习笔记——第一天

Spring学习笔记

一、Spring概念

Spring是一个开源的、轻量级的框架,spring也是一个一站式的框架。它可以使用JavaBean来代替EJB。Spring的两个核心部分是(控制反转)和(面向切面)。

二、Spring的特征

1、轻量

2、控制反转(IOC):促进了低耦合。当应用了IOC,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IOC和JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它(即Java的反射原理)。

3、面向切面(AOP):允许通过分离应用的业务逻辑与系统及服务进行内聚性开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已,它们并不负责(甚至是意识)其他的系统级关注点,例如日志或事物支持。简单来说就是扩展功能而不是修改源代码。

4、一站式:Spring在Java EE三层结构中,每一层都提供了不同的解决技术。

                    web层:使用SpringMVC 技术

                    service层:使用Spring的IOC技术

                    DAO层:使用Spring的jdbcTemplate技术

三、配置文件方式实现IOC

第一、IOC底层原理

1、xml配置文件

2、工厂设计模式

3、dim4j(开源XML解析包)解析xml

4、Java反射原理

第二、如何实现IOC

第一步、创建xml配置文件,配置需要自动创建的对象类(被依赖的对象类)

例如:     //表示配置UserService类的的实例对象。

第二步、创建工厂类,使用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;
}

第三、创建spring配置文件

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、在有网的时候敲一遍提示的代码,断网之后也可以出现提示。

五、Spring的Bean管理(基于配置文件的方式)

第一、Bean的实例化

1、Bean的实例化是指在spring中通过配置文件创建对象

2、Bean实例化的三种方式

             第一种:使用类的无参数的构造方法(若要实例化的类没有无参的构造方法,则会出现异常);

             第二种:使用静态工厂创建(创建静态方法,返回类对象)



             第三种:使用实例工厂创建(创建不是静态的方法,返回类对象)



六、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的作用一样)

七、属性注入

概念:创建对象时,给类中的属性也设置值

八、属性注入的三种方式

第一种、使用set方法注入

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中只支持前两种注入方法。

九、在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实例


     
     

第二种:使用set方法注入

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的配置内容如下:










    
    

十一、名称空间p的属性注入

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);
	}
}

配置文件的内容:




	
	
    
    
        
            黄光裕
            高原红
            符桂花
	
    
	
	
    
    
	
	    盛大
	    符泛
	    户会
	
    
	
	
    
    
        
            
            
	    
	
    
	
	
    
    
	
	    安徽合肥
	    北京朝阳
	    成都魔都
	
    
	

十三、IOC和DI的区别

1、IOC(控制反转)表示把对象的创建交给Spring进行配置

2、DI(依赖注入)表示向类中的属性中注入设置值

3、两者的关系:DI不能单独存在,需要在IOC的基础之上完成操作,

十四、Spring整合Web项目的原理

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方法);

你可能感兴趣的:(Spring学习笔记)