Spring 框架
三层架构:表示层,业务逻辑层,数据访问层
mvc 模型-视图-控制器
Spring框架 ---管理框架, 三层架构中属于业务逻辑层框架
spring官网地址 Spring | Home
Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用。
Spring 框架是一个开源的 Java 平台
Spring Framework 的两大核心:IOC和AOP
Spring Framework特性:
非侵入式,对应用程序的结构影响非常小,零污染,控制反转IOC,面向切面编程AOP,IOC容器,组件化、声明式、一站式
面向切面编程是对面向对象编程的补充
面向切面编程:AOP——Aspect Oriented Programming,在不修改源代码的基础上增强代码功能 横向抽取
面向对象:纵向封装
控制反转:IOC——Inversion of Control,翻转资源获取方向。
DI:Dependency Injection,翻译过来是依赖注入
IOC 就是一种反转控制的思想, 而 DI 是对 IOC 的一种具体实现。
IOC 控制反转- 翻转资源获取方向。 IOC降低耦合度,降低程序之间的依赖。
IOC 容器中管理的组件也叫做 bean
IOC容器管理的对象叫做组件,或者 bean
<!-- 配置HelloWorld所对应的bean,即将HelloWorld的对象交给Spring的IOC容器管理 通过bean标签配置IOC容器所管理的bean 属性: id:设置bean的唯一标识 class:设置bean所对应类型的全类名 --> <bean id="helloworld" class="com.dzqc.bean.HelloWorld"></bean>
获取bean的方式有三种:
- 根据id获取 返回Object类型,向下转型
- 根据类获取(常用) 要求Spring配置文件中同类型有且只配置了一个bean时,根据类获取 如果同类型配置了多一个bean,出现异常NoUniqueBeanDefinitionException 如果未对某类配置bean,出现异常:NoSuchBeanDefinitionException
- 根据id和类获取
依赖注入可以理解为:对IOC容器管理的bean(组件,对象)的属性进行赋值
依赖注入 例:对Student类中的属性sid,sname,age,gender进行赋值 Student类依赖属性sid,sname,age,gender
配置bean
bean主鍵:spring的ioc容器管理的对象
IOC容器通过工厂模式(BeanFactory)+反射机制(无参构造方法)创建对象
在spring的ioc容器管理的对象是单例模式(饿汉,懒汉)
依赖注入DI
- set方法<property name=“” value=“”></property>
- 构造器(构造方法)
通过构造方法对对象属性的赋值
constructor-arg构造方法的参数
在constructor-arg中不指定姓名,会按照有参构造方发的参数顺序进行赋值,
如果值与构造方法中对应位置的参数类型不一致,也无法进行自动转换则会出现异常
<constructor-arg value=""></constructor-arg>
- 特殊值
一null property的属性不能包含特殊符号 中间<null/>
二包含特殊符号:
方式一:字符实体 &开头
方式二:CDATA节 <![CDATA[<程顺顺123>]]>
给类类型赋值
方式一:引用外部bean
方式二:内部bean 不能被ioc容器获取到
给数组类型对象hobby赋值
<array>
<value></value>
</array>
给list集合赋值
(1)(内部)
<list>
<ref bean="studentTwo"></ref>
<ref bean="studentThree"></ref>
<ref bean="studentFore"></ref>
</list>
- (外部)
<property name="students" ref="studentList"></property>
<util:list id="studentList">
<ref bean="studentFore"></ref>
<ref bean="studentFive"></ref>
<ref bean="studentSix"></ref>
</util:list>
map集合类型
<map>
<entry key="20009" value-ref="teacher2"></entry>
<entry key="20011" value-ref="teacher3"></entry>
</map>
<!--配置teacher类的bean-->
<bean id="teacher2" class="com.dzqc.entity.Teacher">
<property name="tid" value="20009"></property>
<property name="tname" value="苗萍"></property>
</bean>
<bean id="teacher3" class="com.dzqc.entity.Teacher">
<property name="tid" value="20011"></property>
<property name="tname" value="刘俊银"></property>
</bean>