Spring是一个开源框架 并且是轻量级别的框架(模块化)
Spring 是一个IoC 和 AOP 的容器框架
MyBatis ORM框架 持久层框架
SpringMVC是隶属Spring框架中的一个WEB层框架
Spring是一个容器框架
IoC: 控制反转
AO && OOP: 面向切面编程 && 面向对象编程:
OOP针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分
AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
整体包目录如下:
image创建核心配置文件
<?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-4.3.xsd">
<!-- Spring是一个IoC的容器框架 -->
<!-- IoC控制反转:将权力移交出去 对类进行实例化 替我们服务 -->
<!-- 容器:主要是来管理Bean的生命周期(创建 使用 销毁) -->
<!-- 使用Bean标签 -->
<!--
<bean id="User" class="com.test.model.User"></bean>
等同于
User u1 = new User();
当本xml文件被加载 所有的Bean标签所指代的Bean 都会被进行实例化
-->
<bean id="User" class="com.test.model.User" scope="singleton">
<!-- scope="singleton" 单例模式 (默认值)-->
<!-- scope="prototype" 多例模式 -->
<property name="name" value="bajie"/>
<property name="sex" value="男"/>
<property name="hobby_array">
<array>
<value>篮球</value>
<value>足球</value>
</array>
</property>
<property name="hobby_list">
<list>
<value>篮球</value>
<value>足球</value>
<value>篮球</value>
<value>足球</value>
</list>
</property>
<property name="set">
<set>
<value>篮球</value>
<value>足球</value>
<value>篮球</value>
<value>足球</value>
<value>篮球</value>
<value>足球</value>
</set>
</property>
<property name="map">
<map>
<entry key="hobbysmap" value="MAP" />
<entry key="hobbys">
<list>
<value>篮球</value>
<value>足球</value>
<value>篮球</value>
<value>足球</value>
</list>
</entry>
</map>
</property>
<property name="properties">
<props>
<prop key=""></prop>
</props>
</property>
</bean>
</beans>
加载核心配置文件 并获取对象
ApplicationContext接口
@Test
public void DuQuConfig(){
//接口 xx = new 类路径+接口(“xml配置文件位置”)
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
//获取对象 ac.getBean("User")此处User指向xml文件中的Bean的id
//返回到Object类型 所以进行强制转换
//User user1 = (User) ac.getBean("User");
//或者
//第一个参数依然指向id 后一个参数指向类路径 即可返回想要的类型
User user1= ac.getBean("User",User.class);
System.out.println(user1);
}
当进行加载的时候 默认只会实例化一个对象 即如下图:
![image](http://upload-images.jianshu.io
![Uploading 01_414987.png . . .]
/upload_images/6903669-a8989b453e904f88?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
查看帮助文档:
Attribute : scope
The scope of this bean: typically "singleton" [ 单例模式 只实例化一次 ]
(one shared instance, which will be returned by all calls to getBean with the given id), or "prototype" [ 多例模式 ]
(independent instance resulting from each call to getBean). [ 每一次调用都会独立进行实例化 ]
By default, a bean will be a singleton, unless the bean has a parent bean definition in which case it will
inherit the parent's scope. Singletons are most commonly used, and are ideal for multi-threaded
service objects. Further scopes, such as "request" or "session", might be supported by extended bean
factories (e.g. in a web environment). Inner bean definitions inherit the scope of their containing bean
definition, unless explicitly specified: The inner bean will be a singleton if the containing bean is a
singleton, and a prototype if the containing bean is a prototype, etc.
Data Type : string
在进行配置的时候 scope属性的默认值就是 singleton 单例模式
可进行重新配置 scope = "prototype"
IoC 控制反转 ---- DI 依赖注入(注入的是值)
方式一:使用setter注入方式 注意在Bean里面必须有Set()方法
在xml文件内进行配置的时候
<property name="xxxx">
这里的name可以进行补全 实际上是框架自动映射了Bean里面的Set()方法的首字母小写
[在这里只介绍java的内置类型的注入]
<bean id="User" class="com.test.model.User" scope="singleton">
<property name="name">
//此处只能注入 字符串 整型等 简单的数据类型
//<value>标签里的内容两端不能存在空格 spring是识别空格的
//因此等号两边不允许有空格 属性和属性之间通过空格进行分隔
<value>bajie</value>
</property>
//存在一种简写方式 如下
<property name="name" value="bajie"/>
</bean>
除却简单数据类型 下面代码演示注入Array List Set Map类型的数据
Bean里的属性如下所示:
private String name;
private String sex;
private String [] hobby_array;
private List<String> hobby_list;
private Set<String> set;
private Map<String,Object> Map;
private Properties Properties;
xml文件内的配置如下所示:
<property name="hobby_array">
<array>
<value>篮球</value>
<value>足球</value>
</array>
</property>
<property name="hobby_list">
<list>
<value>篮球</value>
<value>足球</value>
<value>篮球</value>
<value>足球</value>
</list>
</property>
<property name="set">
<set>
//set类型依然会有去重的功能
<value>篮球</value>
<value>足球</value>
<value>篮球</value>
<value>足球</value>
<value>篮球</value>
<value>足球</value>
</set>
</property>
<property name="map">
<map>
<entry key="vip" value="会员" />
//或者如下写法 指定key后 value为List类型
<entry key="hobbys">
<list>
<value>篮球</value>
<value>足球</value>
<value>篮球</value>
<value>足球</value>
</list>
</entry>
</map>
</property>
//跟map对应的 存在一个properties 这个是HashTable的实现类 HashTable又是对Map类的实现
//所以properties也是Map的一种
<property name="properties">
<props>
//此时value内只能存在String类型的值
<prop key="vip">String</prop>
</props>
</property>
网友评论