IOC
IOC为控制反转,通俗来说就是将我们自己创建对象的方式改变为Spring来做,由Spring来为我们创建对象。
Spring的常用接口
-
BeanFactory接口
-
ApplicationContext接口
Spring的配置文件
Spring容器支持XML和Properties两种格式的配置文件,常用XML格式的配置文件。XML配置文件的根元素是<beans>,<beans>元素包含<bean>子元素,每个<bean>子元素可以定义一个Bean,可通过<bean>元素将Bean注册到Spring容器中。
属性 | 描述 |
---|---|
id | id属性是<bean>元素的唯一标识符,SPring容器对Bean的配置和管理通过id属性完成,装配Bean时也需要根据id值获取对象 |
name | name属性可以为Bean指定多个名称,每个名称之间用逗号或分号隔开 |
class | class属性可以指定Bean的具体实现类,其属性值为对象所属类的全路径 |
scope | scope属性用于设定Bean实例的作用范围,其属性值有singleton(单例)、prototype(原型)、request、session、global session |
注:id和class是必须要有的。
演示Bean的实例化——构造方法实例化
-
创建maven项目,引入spring相关依赖:spring-core,spring-beans,spring-context,spring-expression,commons-logging
<dependencies> <!--spring的基础包 spring-core--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- spring的基础包 spring-beans--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- spring的基础包 spring-context--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!--spring的依赖包 commons-logging--> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> </dependencies>
-
编写dao的接口
public interface UserDao { void say(); }
-
写dao的实现类
public class UserDaoImpl implements UserDao { public void say(){ System.out.println("userDao say hello world!"); } }
-
写配置文件
<?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.xsd"> <bean id="userDao" class="cn.com.hxci.dao.impl.UserDaoImpl"/> </beans>
-
测试Spring
public class TestUserDao { public static void main(String[] args){ ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = ac.getBean("userDao", UserDao.class); userDao.say(); }
最后输出
Bean的装配方式
bean的装配就是bean依赖注入,通俗说就是给属性进行赋值操作。
基于XML的装配
-
属性setter方法注入
在实例化Bean的过程中,会首先调用Bean的默认构造方法来创建对象,再通过反射的方式来调用setter方法注入属性值。所以Bean中必须要有默认的无参构造器,需要注入的属性提供对应的setter方法。并且在配置文件需要使用<bean>元素的子元素<property>来为每个属性注入值。
public class Account { private Integer id; private String usernmae; private Double balance; public void setId(Integer id) { this.id = id; } public void setUsernmae(String usernmae) { this.usernmae = usernmae; } public void setBalance(Double balance) { this.balance = balance; } }
配置文件
<bean id="account" class="cn.com.hxci.Account"> <property name="id" value="1"/> <property name="usernmae" value="小于"/> <property name="balance" value="99.99"/> </bean>
-
构造方法注入
使用构造方法注入时,需提供有参的构造方法,并且在配置文件中需要使用<bean>元素的子元素<constructor-arg>来定义构造方法的参数。
public class Account { private Integer id; private String usernmae; private Double balance; public Account(Integer id, String usernmae, Double balance) { this.id = id; this.usernmae = usernmae; this.balance = balance; } }
配置文件
<bean id="account" class="cn.com.hxci.Account"> <constructor-arg name="id" value="1"/> <constructor-arg name="usernmae" value="小于"/> <constructor-arg name="balance" value="99.99"/> </bean>
注意:
value是用于基本数据类型的注入,ref是用于对象注入。
基于注解的装配
Spring常用的注解
注解 | 描述 |
---|---|
@Component | 指定一个普通的Bean,可以作用在任何层次 |
@Controller | 指定一个控制器组件Bean,用于将控制层的类标识为Spring中的Bean,功能上等同于@Component |
@Service | 指定一个业务逻辑组件Bean,用于将业务逻辑层的类标识为Spring中的Bean,功能当等同于@Component |
@Repository | 指定一个数据访问组件Bean,用于将数据访问层的类标识为Spring中的Bean,功能上等同于@Component |
@Scope | 指定Bean实例的作用域 |
@Value | 指定Bean实例的注入值 |
@Autowired | 指定要自动装配的对象 |
@Resource | 指定要注入的对象 |
@Qualifier | 指定要自动装配的对象的名称,通常与@Autowired联合使用 |