ssm--spring1

spring_day01

1.Spring介绍
1.spring概述:
	spring是基于JavaSE/JavaEE企业开发的一站式(全栈式)的轻量级开源框架(Framework)
2.spring起源	
	Rod Johnson(Spring 之父)
2.耦合性
 1.耦合性的含义:
	程序间的依赖关系
 2.解耦:
	降低(削减)程序间的耦合性。程序的执行要求低耦合,高内聚。就是同一个模块下各元素间要高度紧密,但是模块间相互依赖关系不那么紧密。
3.解耦的原因:
	提高程序的灵活性和可扩展性
4.解耦的方式:
	加载配置文件,获取要创建对象的全限定类名,通过反射的方式创建对象,避免new关键字的使用
	Object obj = Class.forName("classPath").newInstance();
3.Spring经典面试题
spring的三大经典思想:IOC DI AOP

IOC: Inversion Of Control (控制反转)
IOC的本质:创建对象交给spring容器来管理,而不是使用new关键字
IOC的作用:降低程序间的耦合性(削减依赖关系)
IOC的实现原理:工厂模式(BeanFactory)+反射+xml配置文件

DI: Dependency Injection (依赖注入)
DI的本质:给某个对象设置值
DI的作用:对象之间有依赖关系,不需要我们手动去设置值,spring框架帮我们解决

AOP: Aspect Oriented Programming(面向切面编程)
AOP作用:将重复的代码抽取出来,利用代理模式,在不修改源码的基础上,对已有的方法进行增强
AOP原理:代理模式
4.String家族
String StringBuffer StringBuilder
String : 字符串常量 
String str1 = "aa"; str1 += "bb" ;本质上JVM重新开辟了一个新的内存空间给新的str1,然后垃圾回收机制回收掉原来的str1 = "aa";
StringBuffer : extends AbstractStringBuilder 
跟StringBuilder差不多,不过它是线程安全的,所有的方法都使用了synchronized
StringBuilder : 字符串构造者 
5.基于xml的spring IOC
1.让spring管理对象,在bean.xml中配置中配置bean标签
	schema约束:
<?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">
    <!--配置service层-->
    <bean id="accountService" class="com.baidu.service.impl.AccountServiceImpl"></bean>
    <!--配置dao层-->
    <bean id="accountDao" class="com.baidu.dao.impl.AccountDaoImpl"></bean>
</beans>

2.BeanFactory和ApplicationContext的区别
	BeanFactory是spring中的顶层接口,ApplicationContext的BeanFactory的子接口,在BeanFactory这颗树上的都叫Bean工厂,也叫spring容器。
	ApplicationContext是立即加载,只要一读取配置文件,默认情况下就会立刻创建对象,推荐使用。
	BeanFactory是延迟加载,当调用getBean()方法,根据id获取对象时才会创建对象。

3.ApplicationContext接口的实现类对象:
	1.基于xml配置的实现类
		ApplicationContext ac =
new ClassPathXmlApplicationContext("bean.xml"); //classPath,相对resources路径,推荐使用
new FileSystemXmlApplicationContext(String absolutePath); //bean.xml的绝对路径,从磁盘开始
	UserServiceImpl userService = ac.getBean("bean容器中的ID");
	2.基于注解配置的实现类
new AnnotationConfigApplicationContext();

4.bean标签的配置:
<bean id="accountService" class="com.baidu.service.impl.AccountServiceImpl"
      scope="singleton" init-method="init" destroy-method="destroy">
</bean>
id:	给对象在Bean容器中提供唯一标识,用于创建对象,供applicationContext.getBean(id)引用;
class: 指定需要创建对象的全限定类名,用于反射创建对象,Class.forName("classPath").newInstance();
scope: 指定对象的作用范围
	singleton -->创建单例对象,默认值,init/destroy方法只会执行一次
	prototype -->创建多例对象,每创建一次对象,调用一次init方法,destroy方法不归spring管辖
	request -->在web项目中,创建一个Bean对象,并存入request域中
	session -->在web项目中,创建一个bean对象,并存入session域中
	global-session -->在web项目中,应用在集群环境中
init-method: 指定类中初始化方法的名称
destroy-method: 指定类中销毁方法的名称
6.bean 的作用范围和生命周期
scope="singleton" : 容器在,bean对象在。容器亡,bean对象亡
	一个应用只有一个bean对象的实例,它的作用范围是整个应用
	bean的出生:当程序加载完配置文件,创建容器时,立即创建bean对象,即:
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
	bean的存活时间:只要容器存在,bean对象就存在
	bean的消亡:当应用结束,容器被销毁时,bean对象就消失了

scope="prototype" :
	每获取一次bean对象,就会创建一个新的bean对象实例
	bean的出生:当每调用一次getBean()方法时,就创建一个新的bean对象,即:
	Object obj = as.getBean(id);
	bean的死亡:当对象长时间不使用时,被java的垃圾回收器回收

注意: 
	1.要想执行destroy方法的效果,需要手动关闭容器对象,否则mian方法结束,destroy方法还没开始执行,整个方法就直接结束了。classPathXmlApplicationContext.close();
	2.只有指定为scope="singleton"才能调用bean对象中destroy方法的执行;如果指定为scope="prototype"因为对象是由java的垃圾回收器回收的,此时main方法早就结束了,对象早已不再使用,所以也无法再执行destroy法,spring不负责多例对象的销毁
7.实例化Bean的三种方式
第一种方式:使用默认无参构造函数
<bean id="accountService" class="com.baidu.service.impl.AccountServiceImpl">
在默认情况下:会根据默认无参构造函数来创建类对象。如果 bean 中没有默认无参构造函数,将会创建失败。
第二种方式: Spring 管理静态工厂-使用静态工厂的方法创建对象
    public class StaticFactory{
        public static AccountServiceImpl createAccountService(){
			return new AccountServiceImpl();
        }
    }
    <bean id="accountService" class="com.baidu.factory.StaticFactory" 
   factory-method="createAccountService"></bean>
 class : 指定静态工厂的全限定类名
 factory-method : 指定生产对象的静态方法
第三种方式: spring 管理实例工厂-使用实例化工厂的方法创建对象
    public class StaticFactory{
        public  AccountServiceImpl createAccountService(){
        	return new AccountServiceImpl();
        }
    } 
  <bean id="instanceFactory" class="com.baidu.factory.InstanceFactory"></bean>
 <bean id="accountService" factory-bean="instanceFactory" factory-method="createAccountService">
  factory > id : 唯一标识,供实例对象factory-bean引用
  class : 指定实例工厂的全限定类名
  factory-bean : 用于指定实例工厂bean对象的id
  factory-method : 指定实例工厂中创建对象的方法
  

猜你喜欢

转载自blog.csdn.net/qq_42514129/article/details/84521894
今日推荐