day01_SSM技术之IOC_DI

框架

生活中框架

买房:买房子(装修后入住-半成品
手抓饼(食品半成品)

程序中框架

代码半成品

  • spring(万能-一站式)
  • controller:springMVC
  • dao:jdbcTemplate->data系列
  • service:事务
  • springMVC:Servlet(Controller|Handler)
  • mybatis:Dao(Dao|jdbc)
  • 以前:SSH(Spring+Struts2+Hibernate)->SSM(Spring+SpringMVC+Mybatis)

spring 框架简介

  • Spring官网:http://spring.io
  • Spring是一个开源框架
  • Spring是一个IOC(DI)和AOP容器框架。
  • Spring特性
    • 一站式:Spring可以解决层的问题
    • 非侵入式:使用Spring框架,无需直接继承类(实现接口)
  • Servlet侵入式:继承HttpServlet 或 实现Servlet
    • 组件化:即插即用
    • 依赖注入:IOC|DI
    • 面向切面:AOP

搭建框架思路

  1. 导入相关jar包(添加依赖)
  2. 编写核心配置文件:xxx.xml
  3. 使用核心类库

搭建spring框架(spring helloworld)

导入5个jar包(后期及其简化-maven

spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELE2ASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
commons-logging-1.1.1.jar

编写核心配置文件

配置文件名字:任意编写,建议:applicationContext.xml | beans.xml
配置文件位置:类路径下(类似src路径,新建source folder类型的conf)
IDEA支持spring框架。只要添加指定jar包后,会出现Spirng Config的xml文件提示。

编写POJO类(bean-Student)

测试(使用核心类库-ApplicationContext容器对象)

spring IOC&AOP

IOC

  • IOC(Inversion of Control):反转控制 | 控制反转
  • 反转对象的控制权利及获取方式
  • 传统方式: 我想吃饭 我需要买菜做饭
  • 反转控制: 我想吃饭 饭来张口
  • IOC具体在spring中的实现
    * BeanFactory:一般程序员不会用到,为spring底层提供的。
    * ApplicationContext:程序员使用
    * FileSystemXmlApplicationContext(实现类):基于系统路径,获取资源文件,不推荐使用
    * ClassPathXmlApplicationContext(实现类):基于类路径,获取资源文件,推荐使用
    * ConfigurableApplicationContext(子接口):可以刷新关闭上下文对象。(ApplicationContext

DI(Dependency Injection):依赖注入

AOP

bean标签简介

bean标签基本用法:管理POJO

bean标签属性

  • id:bean唯一标识
  • name:bean标识(不唯一,不建议使用)
  • class:管理POJO的全类名
    反射原理,通过类全名,获取对象。
Class clz = Class.forName("com.atguigu.bean.Student");
Student stu = clz.newInstance();

bean标签子标签property(管理POJO中的属性

  • 属性
    name:指定对象的属性名
    value:设置字面量属性值
    ref:设置(非字面量)引入外部bean

getBean()的三种方式

  • getBean(Class clz); 不足:如果容器装配了多个bean对象,会报错。
  • getBean(String beanId); 不足:默认返回Object类型
  • getBean(String beanId,Class clz):推荐使用

依赖注入方式

JavaSE:为对象中属性赋值的方式哪些?

  • 构造器
  • setXXX()
  • 反射(略

Spring注入方式之Set注入

  • 通过bean标签的子标签实现
eg:
<property name="xxx" value="10001"></property> 

Spring注入方式之构造器注入

  • 通过bean标签中的子标签实现
eg:
<constructor-arg name="id" value="1001"></constructor-arg>		

P名称空间注入方式,本质是Set注入

  • 通过bean标签中p:属性实现
eg:
<bean id="bookP" class="com.atguigu.springdemo.ioc.Book" p:id="1006">

依赖注入值介绍

字面量

  • 语法结构:基本数据类型及其封装类、String.
  • 使用角度:value属性或value标签中可以书写的值
  • 注意:如果解决字面量值的特殊字符问题?
    JavaWeb中:实体字符,转义字符,如:< > ©等等
    使用<![CDATA[指定字符]]>区

引入外部已声明bean

级联属性赋值

<bean id="deptOne" class="com.atguigu.springdemo.ioc.Dept">
	<property name="id" value="10001"></property>
	<property name="name" value="研发部"></property>
</bean>
	
<bean id="empM" class="com.atguigu.springdemo.ioc.Emp">
	<property name="dept" ref="deptOne"></property>
	<!-- 给bean的级联属性赋值 -->
	<property name="dept.name" value="教务部门"></property>
</bean>

内部bean

  • 内部类:在一个类中,完整定义了另一个类。
  • 内部bean:在一个bean中,完整定义了另一个bean.
<bean id="empM2" class="com.atguigu.springdemo.ioc.Emp">
	<property name="dept">
		<bean id="deptTwo" class="com.atguigu.springdemo.ioc.Dept">
			<property name="id" value="10002"></property>
			<property name="name" value="财务部"></property>
		</bean>
	</property>
</bean>

集合类型

List Set|Array

<bean id="dept3" class="com.atguigu.springdemo.ioc.Dept">
	<property name="list">
		<list>
			<ref bean="empSet"/>
			<ref bean="empCon"/>
		</list> 
	</property>
</bean>

Map

<bean id="dept4" class="com.atguigu.springdemo.ioc.Dept">
	<property name="map">
		<map>
			<entry key="chailaoshi" value-ref="empSet"></entry>
			<entry key="chenlaoshi" value-ref="empCon"></entry>
		</map>
	</property>
</bean> 

提取集合类型的bean(需要引入util名称空间)

<util:list id="listEmp">
	<ref bean="empSet"/>
	<ref bean="empCon"/>
</util:list>
					
<bean id="dept3" class="com.atguigu.springdemo.ioc.Dept">
	<property name="list" ref="listEmp"></property>
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值