Spring框架之框架的概述,项目的创建流程,IoC的应用,配置文件及依赖注入

1. Spring框架的概述

        Spring是一个开源框架

        Spring是为了解决企业应用开发的复杂性而创建的。主要优势之一就是其分层架构,分层架构允许使用者选择想要使用的组件,同时为 J2EE 应用程序开发提供集成的环境。

        Spring使用基本的JavaBean来完成以前只能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发,从其简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中有所受益。

        Spring的核心是控制反转(IoC)和面向切面编程(AOP)。简单来说,Spring是一个分层的JavaSE/JavaEE的一站式(full-stack) 轻量级开源框架。

2. Spring框架所支持的JavaEE开发中的三层结构

        WEB层        -- Spring MVC

        业务层        -- Beans,通过IOC进行管理

        持久层        -- Spring的JDBC模板/ORM模板,ORM模板用于整合其他的持久层框架


3. Spring框架的优点

        1.方便解耦,简化开发

                    Spring就是一个大的工厂,可以将所有对象的创建和维护交由其进行管理

        2.AOP编程的支持

                    Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

        3.声明式事务的支持

                    只需要通过配置就可以完成对事务的管理,无需手动进行事务的开启,提交,回滚,关闭等操作

        4.方便程序的测试

                    Spring对Junit4提供了支持,可以通过注解方便的测试用Spring所编写的程序

        5.方便集成各种优秀的开源框架

                    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(Struts2、Hibernate、MyBatis、Quartz等)的直接支持

        6.降低了JavaEE API的使用难度

                        Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等)都提供了封装,使这些API的使用难度大大降低


4.  什么是IoC(控制反转)

        IoC        -- Inverse of Control        控制反转

        就是将对象的创建权力反转给Spring,由Spring对对象进行创建和维护

        使用IoC可以解决程序耦合性高的问题


5. Spring项目的创建流程

        1.下载Spring框架的开发jar包

                    下载地址:http://repo.springsource.org/libs-release-local/org/springframework/spring

                    解压后jar包的目录结构

                            docs        -- 相关文档

                            libs        -- 相关jar包和源码

                            schema -- 相关约束

        2.创建JavaWEB项目,引入Spring的相关jar包

        3.创建目录结构,编写类和方法

                    注意,使用Spring框架开发项目,需要编写接口与相应的实现类

                            UserService        -- 接口

                            UserServiceImpl    -- 相应的实现类

4. 想要把UserServiceImpl实现类的创建交给Spring框架来进行管理,需要创建Spring框架的配置文件,编写相应的配置

                    1.在src目录下创建applicationContext.xml的配置文件,名称可以是任意的,但是一般都会使用默认名称

                    2.引入spring的约束  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


</beans>

                    3.进行UserServiceImpl的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="userService,为这个类其个名字,一般采用父接口的名字,首字母小写" class="UserServiceImpl的完全限定名"/>

</beans>

                    4.编写测试程序,采用Spring框架的工厂方式来获取到UserService接口的具体实现类

        @Test
	public void run() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml")
		UserService us = (UserService) ac.getBean("userService");
		us.方法;
	}


6. ApplicationContext接口

        使用ApplicationContext工厂接口可以获取到具体的Bean对象,该接口下有两个具体的实现类

                    ClassPathXmlApplicationContext        -- 加载类路径下的Spring配置文件

                    FileSystemXmlApplicationContext        -- 加载本地磁盘下的Spring配置文件


7. BeanFactory接口

        BeanFactory接口是Spring框架早期提供的创建Bean对象的工厂接口,使用BeanFactory工厂接口也可以获取到Bean对象

	@Test
	public void run() {
		BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		UserService us = (UserService) factory.getBean("us");
		us.方法;
	}

8. BeanFactory和ApplicationContext的区别

        BeanFactory        -- 采取延迟加载的形式,第一次getBean时才会初始化Bean

        ApplicationContext         -- 加载applicationContext.xml的时候就会实例化具体的Bean对象,还提供了事件传递,Bean的自动装配,各种不同应用层的Context的实现等一些其他的功能

9. Spring框架中<bean>标签的配置

        1. id属性和name属性的区别

                    id属性         -- 给Bean起个名字,在约束中采用ID的约束,要求唯一

                            取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号,不能出现其他特殊字符

                    name属性        -- 给Bean起个名字,没有采用ID的约束

                            取值要求:可以出现特殊字符

                            如果<bean>标签没有id属性 , name属性就可以当做id属性使用

                            Spring框架在整合Struts1框架的时候,Struts1框架的访问路径是以/开头的,例如:/userAction,因为id属性取值要求不能出现其他的特殊字符,所以name属性就被创建了出来

        2. class属性        -- Bean对象的完全限定名

3. scope属性        -- Bean对象的作用范围

                    singleton        -- 单例(默认值)

                    prototype        -- 多例,在Spring框架整合Struts2框架的时候,Action类也需要交给Spring做管理,应该把Action类配置成多例

                    reques        -- 应用在Web项目中,每次HTTP请求都会创建一个新的Bean

                    session        -- 应用在Web项目中,同一个HTTP Session 共享一个Bean

                    globalsession        -- 应用在Web项目中,多个服务器间的session共享一个Bean

        4.init-method属性        -- 当bean被加载到容器的时候调用init-method属性值所指定的方法

        5.destroy-method        -- 当bean从容器中删除的时候调用destroy-method属性值所指定的方法

                    想查看destroy-method的效果,有如下条件

                            1.scope= singleton

                            2.手动调用ClassPathXmlApplicationContext的close()方法


10. 依赖注入(DI)

        1.IOC和DI的概念

                    IOC -- Inverse of Control        控制反转,将对象的创建权力反转给Spring,由Spring对对象进行创建和维护

                    DI -- Dependency Injection        依赖注入,在Spring框架负责创建Bean对象时,动态的将Bean对象所依赖的对象注入到Bean组件中

2. 如何配置DI(依赖注入)

                    如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的IoC功能时,可以通过依赖注入把该属性的值传入进来

                    具体的配置如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="userService,为这个类其个名字,一般采用父接口的名字,首字母小写" class="UserServiceImpl的完全限定名">
		<property name="属性名" value="属性值"></property>
	</bean>
</beans>

11. 依赖注入的方式

        1.对于类成员变量来说,常用的注入方式有两种

                    构造方法注入

                    setter方法注入

        2.在Spring框架中提供了前两种的属性注入的方式

1. 构造方法的注入方式

                            编写Java的类,提供有参构造方法

                            编写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="userService,为这个类其个名字,一般采用父接口的名字,首字母小写" class="UserServiceImpl的完全限定名">
		<constructor-arg name="属性" value="属性值"></constructor-arg>
	</bean>
</beans>

2. 属性的setter方法的注入方式

                     编写Java的类,提供属性和对应的set方法

                    编写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="userService,为这个类其个名字,一般采用父接口的名字,首字母小写" class="UserServiceImpl的完全限定名">
		<property name="属性" value="属性值"></property>
	</bean>
</beans>

3. 如果Java类的属性是另一个Java类,那么需要将配置文件中的value属性变为ref属性

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="userService,为这个类其个名字,一般采用父接口的名字,首字母小写" class="UserServiceImpl的完全限定名">
		<property name="属性" ref="名称1"></property>
	</bean>
	
	<bean id="名称1" class="完全限定名"/>
</beans>
        4. :p名称空间的注入方式

                    1. 需要先引入 p 名称空间

                            在schema的名称空间中加入该行        xmlns:p="http://www.springframework.org/schema/p"

                    2.使用p名称空间的语法

                            p:属性名 = ""

                            p:属性名-ref = ""

        5.SpEL的注入方式

                    1.SpEL:Spring Expression Language是Spring的表达式语言,拥有一些自己的语法

                    2.语法

                            #{语句}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="userService,为这个类其个名字,一般采用父接口的名字,首字母小写" class="UserServiceImpl的完全限定名">
		<property name="属性" value="#{值}"></property>
	</bean>
	
</beans>
                    4. SpEL还支持调用类中的属性或者方法,通过对象.属性,对象.方法来进行调用

阅读更多
个人分类: Spring
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭