先附上Spring的文档 所用的操作里面都有详细的介绍(点击查看)
Spring的两个重要特征
-
控制反转
-
面向切面
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。它的底层设计模式采用了工厂模式,所有的
Bean
都需要注册到Bean工厂中,将其初始化和生命周期的监控交由工厂实现管理。程序员只需要按照规定的格式进行Bean开发,然后利用XML文件进行bean
的定义和参数配置,其他的动态生成和监控就不需要调用者完成,而是统一交给了平台进行管理。 [4] 控制反转是软件设计大师 Martin
Fowler在 2004 年发表的”Inversion of Control Containers and the Dependency
Injection
pattern”提出的。这篇文章系统阐述了控制反转的思想,提出了控制反转有依赖查找和依赖注入实现方式。控制反转意味着在系统开发过程中,设计的类将交由容器去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同,“不用你找,我来提供给你”,这就是控制反转的含义
[ 。
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
---------------------------------------------------------------------------------------------------------- 来自百度百科
Spring 的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
DI依赖注入
示例
<bean class="com.feng.pojo.Friend" id="friend1">
<property name="name" value="小李"/>
</bean>
bean表示一个对象
class表示对象所在的位置
id 表示唯一的标识符
property 标识对象中的属性
构造器注入
使用字段 constructor-arg
可以看到共有5个参数可选
1.确定构造器中的形参 type name indx
- type通过形参类型确定
- name通过形参的名称确定
- index 通过形参的位置来确定
2.通过构造器为属性赋值 - value直接赋值
- ref 引用其他对象赋值
Set注入(重点)
- 基本类型注入
<bean class="com.feng.pojo.Friend" id="friend2">
<property name="name" value="小王"/>
</bean>
值的注入是通过value
- 引用注入
- <bean class="com.feng.pojo.Friend" id="friend1">
<property name="friend" ref="friend2"/>
</bean>
值的注入是通过ref, 值是其他对象
- 集合类及properties文件注入
使用property来指定要注入的属性 使用对应的标签 在标签中赋值 使用 value 或 ref
看看官方文档给出的demo
<bean id="moreComplexObject" class="example.ComplexObject">
<!-- results in a setAdminEmails(java.util.Properties) call -->
<property name="adminEmails">
<props>
<prop key="administrator">administrator@example.org</prop>
<prop key="support">support@example.org</prop>
<prop key="development">development@example.org</prop>
</props>
</property>
<!-- results in a setSomeList(java.util.List) call -->
<property name="someList">
<list>
<value>a list element followed by a reference</value>
<ref bean="myDataSource" />
</list>
</property>
<!-- results in a setSomeMap(java.util.Map) call -->
<property name="someMap">
<map>
<entry key="an entry" value="just some string"/>
<entry key ="a ref" value-ref="myDataSource"/>
</map>
</property>
<!-- results in a setSomeSet(java.util.Set) call -->
<property name="someSet">
<set>
<value>just some string</value>
<ref bean="myDataSource" />
</set>
</property>
</bean>
其他注入
p命名空间注入 和 c命名空间注入
p命名空间 用于set注入
c命名空间 用于构造器注入
使用时必须在xml中加上这两行约束
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
示例
<bean name="john-modern"
class="com.example.Person"
p:name="John Doe"
p:spouse-ref="jane"/>
<bean id="beanOne" class="x.y.ThingOne" c:thingTwo-ref="beanTwo"
c:thingThree-ref="beanThree" c:email="something@somewhere.com"/>
Bean作用域
自动装配
可以通过xml配置 也可以通过注解配置 这里讲的是注解
spring的Autowired装配
java自带的注解
注解的使用