1、spring 的介绍
ejb -> spring
表现层 Struts2 -> SpringMVC
持久层 hibernate -> mybatis
spring 无可替代
1)spring理解:
spring是一个对象的容器,专门来管理对象。
spring是一站式轻量级的框架,一站式具体表现在spring自己可以实现表现层、业务层、持久层分层功能。
2)spring有三大经典的思想,分别是"IOC"、"DI"、"AOP"
2、spring 容器:底层有 Map 结构,用来存放对象
底层产生对象:xml 配置文件 + 反射 + 工厂模式
applicationContext.xml
Class.forName("cn.itcast.spring.demo1.UserDaoImpl");
容器创建的三种方式
ClassPathXmlApplicationContext
容器,也叫Bean工厂,常用接口有:BeanFactory/ApplicationContext/WebApplicationContext
相关源码:BeanDefinitionRegistry/BeanDefinition
org.springframework.beans.factory.support.DefaultListableBeanFactory
/** Map of bean definition objects, keyed by bean name */
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(256);
默认的键的名字:UserDaoImpl类名首字母小写
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
3、IOC(inversion of controller)控制反转
1)IOC 的理解
以前,我们自己创建对象:Student st=new Student("",18);
现在,一个对象的创建和整个生命周期的维护都交给了spring,
通过配置文件或者注解的方式让spring来管理对象
IOC的本质,spring容器来创建,不是我们手动new,创建对象的权利交给了spring
爱情买卖 当初是你要放开,放开就放开 自己new的对象与spring容器里的对象有区别
2)IOC入门案例体会
(1)ioc底层实现原理(xml配置文件+反射+工厂模式)
(2)ioc实现的步骤
第一步:导入基本的坐标(beans,context,core,expression,日志包)
第二步:在src目录下创建spring创建bean的配置文件applicationContext.xml(引入约束,配置bean)
第三步:使用ClassPathXmlApplicationContext测试,从spring中获取bean
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDaoImpl bean = (UserDaoImpl) context.getBean("userDao");
3)spring创建bean的三种方式(重点掌握无参构造来实例化对象)
(1)无参构造(默认,实际开发中使用该方法)
(2)静态工厂类,静态工厂方法
(3)普通工厂类,普通实例工厂方法
<bean id="该bean取个名字等同于name属性" class="类的完整路径" scope="singleton/prototype...."></bean>默认是singleton
3、DI(dependency injection)依赖注入
1)DI 的理解(对象的成员变量初始化)
给 bean 的成员变量初始化,该成员变量可以是一个普通的类型,也可以是一个引用类型变量。
2)DI实现的方式
(1)set方法注入(最常用)
在Bean所在类中提供成员变量的set方法
在Spring的配置文件中使用<property name="" value=""/>
能够注入的对象,一定都是在容器里面的
A B
<bean id="b" class="xxx.B">
<property name="age" value="5" />
<property name="color" value="黄色" />
</>
<bean id="a" class="xxx.A" >
<property name="age" value="20" />
<property name="color" value="白色" />
<property name="b1" ref="b"> private B b1;
</>
使用set方法注入对象、集合、properties数据
a.<property name="" ref=""></property> 将已经声明的对象可以通过ref属性引入
b.<property><list name=""><value></value></list></property> 注入数组或者list
c.<property><map name=""><entry key="" value=""></entry></map></property> 注入map
d.<property><props name=""><prop></prop></props></property> 注入properties属性
(2)有参构造注入
在Bean所在类中提供成员变量的有参构造
<bean id="tom" class="cn.itcast.spring.demo5.Tom" >
<constructor-arg name="name" value="tom"></constructor-arg>
<constructor-arg name="age" value="5"></constructor-arg>
<constructor-arg name="color" value="灰色"></constructor-arg>
<constructor-arg name="jerry" ref="jerry"></constructor-arg>
</bean>
3)spel:spring的表达式
value="#{dogAge}" 引用对象 ref="bean的id"
value="#{dogAge.age+20}"等同于value="#{dogAge.getAge()+20}"
value="#{dogAge.getName()+'PersonPerson'}"
<bean id="personAge" class="cn.itcast.spring.demo4.Person">
<property name="age" value="#{dogAge.getAge()+20}"></property>
<property name="username" value="#{dogAge.getName()+'PersonPerson'}"></property>
<property name="dog" value="#{dogAge}"></property>
</bean>
4.spring 和 web 整合
ContextLoaderListener Context指:ServletContext
@Override
public void contextInitialized(ServletContextEvent event) {
initWebApplicationContext(event.getServletContext());
}
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);
启动程序 web.xml -> applicationContext.xml
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于