String学习笔记(一)

一、什么是Spring

  • Spring
    是一个开源框架,Spring是于2003年兴起的一个轻量级开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开元框架
  • Spring:SE/EE开发的一站式框架。一站式框架:有EE开发的每一层解决方案。
    WEB层 :SpringMVC
    Service层 :Spring的Bean管理,Spring声明式事务
    DAO层 :Spring的Jdbc模板,Spring的ORM模块

二、Spring的优点

  • 方便解耦,简化开发
    通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
  • AOP编程的支持
    通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
  • 声明事物的支持
    在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
  • 方便程序的测试
    可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。
  • 方便集成各种优秀框架
    Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
  • 降低Java EE API的使用难度
    Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
  • Java 源码是经典学习范例
    Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

三、Spring的IOC

  • IOC: Inversion of Control(控制反转)
    控制反转:将对象的创建权交给Spring。

  • Spring的开发包
    docs :Spring的开发规范和API
    libs :Spring的开发的jar和源码
    schema :Spring的配置文件的约束

  • 创建web项目,导入jar包

  • 创建接口和类

  • 将实现类交给Spring管理
    在Spring解压路径中找到:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html中的the beans schema

//bean1.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"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   <!-- Spring配置 -->
   <bean id = userDao class = "com.spring.UserDaoImpl"></bean>
</beans>
  • 编写测试类
@Test
	public void test1() {
		ApplicationContext context = new ApplicationContext("bean1.xml");
		UserDao userDao = (UserDao ) context.getBean("UserDao ");
		userDao .save();
  • IOC与DI
    IOC:控制反转,将对象的创建权反转给了Spring。
    DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
    面向对象的时候

    • 依赖

    Class A{
    }
    Class B{
    public void xxx(A a){
    }
    }

  • 继承:is a
    Class A{
    }
    Class B extends A{
    }

  • 聚合:has a

四、Spring的工厂类


ApplicationContext继承BeanFactory

  • BeanFactory:老版本的工厂类
    BeanFactory:调用getBean的时候,才会生成类的实例。

  • ApplicationContext :新版本的工厂类
    ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。
    两个实现类:

  • ClassPathXmlApplicationContext :加载类路径下的配置文件

  • FileSystemXmlApplicationContext :加载文件系统下的配置文件

五、Spring的配置

  • Schema的配置

  • Bean的配置
    标签的id和name的配置
    id :使用了约束中的唯一约束。里面不能出现特殊字符的。
    name :没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。

  • Bean的生命周期的配置(了解)
    init-method :Bean被初始化的时候执行的方法
    destroy-method :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

  • Bean的作用范围的配置(重点)
    scope :Bean的作用范围
    singleton :默认的,Spring会采用单例模式创建这个对象。
    prototype :多例模式。(Struts2和Spring整合一定会用到)
    request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
    session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
    globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

六、Spring的Bean管理(XML方式)

  • Spring的Bean的实例化方式(了解)
  1. 无参构造方法方式(默认)
//创建无参构造方法
public class Bean1 {
	public Bean1() {
		super();
		System.out.println("Bean1中的无参构造方法---")
	}
}
<bean id = bean1class = "com.spring.Bean1"></bean>
  • 静态工厂实例化方式
//编写Bean1的静态工厂
public class Bean2Factory {
	public static Bean2 createBean1() {
		System.out.println("Bean2Factory执行了");
		return new Bean2();
	}
}
静态工厂实例化
<bean id = bean2 class = "com.spring. Bean2Factory" factory-method="createBean2"></bean>
  • 实例工厂实例化的方式
//编写Bean1的静态工厂
public class Bean3Factory {
	public static Bean3 createBean3() {
		System.out.println("Bean3Factory执行了");
		return new Bean3();
	}
}
<bean id = bean3Factory class = "com.spring. Bean3Factory"></bean>
<bean id = bean3 factory-bean="bean3Factory" factory-method="createBean3"></bean>
  • Spring的属性注入
  • 构造方法的方式的属性注入
<bean id="car" class="com.initbean.Car">
	<constructor-arg name="name" value="BW"/>
	<constructor-arg name="price" value="1000000"/>
</bean>
  • set方法的方式的属性注
<!-- set方法的方式 常用-->
<bean id="car2" class="com.initbean.Car2">
	<property name="name" value="bc"></property>
	<property name="price" value="100000"></property>
</bean>
  • p名称空间的属性注入(Spring2.5以后)
    通过引入p名称空间完成属性的注入:
    普通属性 p:属性名=”值”
    对象属性 p:属性名-ref=”值”
  1. p名称空间的引入
<beans  	
				xmlns="http://www.springframework.org/schema/beans"
				xmlns:p="http://www.springframework.org/schema/p"
		    	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>
  • 使用p名称空间
<bean id="car2" class="com.initbean.Car2" p:name="QQ" p:price="20000"></bean>
  • SpEL的属性注入(Spring3.0以后)
    Spring Expression Language,Spring的表达式语言。
    语法:#{SpEL}
<!-- SpEL 属性注入 -->
<bean id="car2" class="com.initbean.Car2">
	<property name="name" value="#{carInfo.name}"></property>
	<property name="price" value="#{carInfo.price()}"></property>
</bean>
  • 集合类型属性注入了解
	<!-- Spring的集合属性的注入============================ -->
	<!-- 注入数组类型 -->
	<bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">
		<!-- 数组类型 -->
		<property name="arrs">
			<list>
				<value>王东</value>
				<value>赵洪</value>
				<value>李冠希</value>
			</list>
		</property>
		
		<!-- 注入list集合 -->
		<property name="list">
			<list>
				<value>李兵</value>
				<value>赵如何</value>
				<value>邓凤</value>
			</list>
		</property>
		
		<!-- 注入set集合 -->
		<property name="set">
			<set>
				<value>aaa</value>
				<value>bbb</value>
				<value>ccc</value>
			</set>
		</property>
		
		<!-- 注入Map集合 -->
		<property name="map">
			<map>
				<entry key="aaa" value="111"/>
				<entry key="bbb" value="222"/>
				<entry key="ccc" value="333"/>
			</map>
		</property>
	</bean>
全部评论

相关推荐

头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
伟大的烤冷面被普调:暨大✌🏻就是强
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务