IOC是一种思想,移交对象的控制权,交给spring容器,其目的就是解耦(对象的new)。DI是他的实现方式。简单来讲:就是提供可扩展性更强的代码。比如,切换一些功能的时候,实现插入即可用,而不用再去调整代码。(举例:数据库连接信息)
构造器注入(需要对应的构造函数)
通过对应的构造函数注入注入对象(核心标签就是 <constructor-arg/>)
<bean id="user" class="com.dzq.dto.User" >
<constructor-arg name="name" value="dzq"/>
</bean>
set方式注入(需要提供get、set方法)
<bean id="userDif" class="com.dzq.dto.User">
<property name="name" value="dzq"/>
<property name="identity" ref="identity"/>
<property name="books">
<array>
<value type="java.lang.String">西游记1</value>
<value type="java.lang.String">西游记2</value>
</array>
</property>
<property name="hobbies">
<list>
<value>游泳</value>
<value>游泳2</value>
</list>
</property>
<property name="games">
<set>
<value>LOL</value>
<value>LOL2</value>
</set>
</property>
<property name="info">
<props >
<prop key="sex">男</prop>
</props>
</property>
<property name="relation">
<map>
<entry key="zs" value="朋友1"/>
<entry key="ls" value="同学1"/>
</map>
</property>
</bean>
扩展方式注入
1.p命名空间 (PS:需要引入约束,property的缩写)
2.c命名空间(PS:需要引入约束,constructor-arg的缩写)
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userP" class="com.dzq.dto.User" p:name="dzq"/>
<bean id="userC" class = "com.dzq.dto.User" c:name="dzq"/>
bean的作用域
通过bean scope 属性设置,(单例 singleton(默认)、原型 prototype、请求request、会话session、应用 application)
Bean的自动装配
autowire = "byType" #通过类型查找
autowire = "byName" #通过属性名称,查找,对应bean_id
使用注解实现自动装配
1.引入context
2.开启注解
<context:annotation-config/>
@Autowired 通过反射实现的注入,不依赖set方法,先通过byname,在通过byType去查找对应的属性。
可以添加子方法上,也能直接添加到属性上
@Resource和@Autowired 的区别
@Resource | @Autowired | |
---|---|---|
来源 | JDK | Spring |
优先级 | byName => byType | byType => byName |
属性 | name,type | required |
是否支持指定名称 | 支持 | 需要借助@Qualifier |
PS:如果为空 需要添加 @Nullable 注解
如果不满足自动装配,@Autowired 需要使用 @Qualifier 指定 名称
优先级-不重要-因为当多个对象时,你只能找到唯一的那个。
使用注解开发
1.开启注解
<context:annotation-config/>
2.开启扫描配置文件
<context:component-scan base-package="com.dzq"/>
3.对应的实体类加上注解(相当于注入简单bean,使用@Value注入简单属性值)
@Component =>引出webmvc 按照对应层级划分的 @Controller @Service @Repository
=>使用注解配置对应的属性 如@Scope 配置bean的作用域
4.xml和注解的最佳实现
综合使用:..暂时没有发现一个好的总结-待续
工厂模式
该环节涉及到对象的创建 引出设计模式-五大创建模式
singleton、prototype(clone)、生产工厂、抽象工厂(实现部分)、构造者模式(set方法返回this,实现链式调用)
javaconfig
以java类的方式,完全取代xml文件。
相当于在类中构建bean,而不需要在xml中去构造了。(引出springboot 自动配置的关键点)
网友评论