一、spring框架
什么是spring? Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。
二、IOC容器
(1)什么是IOC
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
(2)控制反转
把对象的创建和对象的调用过程交给Spring进行管理。使用IOC的目的:为了耦合度降低。
2、依赖注入(简称DI)
DI-Dependency Injection,即“依赖注入”,组件之间的依赖关系由容器在运行期决定,即容器动态的将某个依赖关系注入到组件当中
DI理解的关键点:“谁依赖谁,为什么需要依赖”谁依赖谁:应用程序依赖IOC容器为什么需要依赖:应用程序需要IOC容器来提供对象需要的外部资源注入什么:注入某个对象所依赖的外部资源
(1)set方法注入依赖
set方法注入依赖时,使用property标签,name属性表示类中的属性名,value属性表示当前属性的赋值
<!--依赖注入方式:set方法-->
<bean id="user" class="com.lanou.tools.User">
<!--id属性注入-->
<property name="id" value="1"/>
<!--name属性赋值-->
<property name="name" value="李四"/>
</bean>
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User u1 = (User) context.getBean("user");
System.out.println(u1);
}
(2)有参构造函数注入
<!--依赖注入方式1:有参构造-->
<bean id="user3" class="com.tulun.bean.User">
<!--id属性的注入-->
<constructor-arg name="id" value="22"></constructor-arg>
<!--name属性的注入-->
<constructor-arg name="name" value="zhangsan"></constructor-arg>
</bean>
依赖注入的属性可以是基本的类型,也可以是集合类型,也可以是自定义类型
(1)List注入
<!--List的注入-->
<bean id="person1" class="com.tulun.bean.Person">
<property name="list">
<list>
<value>hello</value>
<value>你好</value>
<value>123</value>
</list>
</property>
</bean>
(2)数组的注入
<!--数组的注入-->
<bean id="person2" class="com.tulun.bean.Person">
<property name="list">
<!--array标签:注入数字-->
<array>
<!--value是直接给定值-->
<value></value>
<!--ref是存储的引用对象-->
<!--<ref></ref>-->
</array>
</property>
</bean>
(3)map的注入
<!--map的注入-->
<bean id="person4" class="com.tulun.bean.Person">
<property name="list">
<!--map标签:注入Map类型的集合-->
<map>
<entry key="1" value="zhangsan"/>
</map>
</property>
</bean>
(3)基于注解的形式注入依赖
@Value注解
@Component(value = "user")
public class User {
@Value("1")
private String id;
@Value("张三")
private String name;
}
@Autowired:注入对象类型
@Component(value = "person")
public class Person {
@Autowired
private User user;
}
|