Spring IOC

IOC

IOC为控制反转,通俗来说就是将我们自己创建对象的方式改变为Spring来做,由Spring来为我们创建对象。

Spring的常用接口

  1. BeanFactory接口

  2. ApplicationContext接口

Spring的配置文件

Spring容器支持XML和Properties两种格式的配置文件,常用XML格式的配置文件。XML配置文件的根元素是<beans>,<beans>元素包含<bean>子元素,每个<bean>子元素可以定义一个Bean,可通过<bean>元素将Bean注册到Spring容器中。

属性描述
idid属性是<bean>元素的唯一标识符,SPring容器对Bean的配置和管理通过id属性完成,装配Bean时也需要根据id值获取对象
namename属性可以为Bean指定多个名称,每个名称之间用逗号或分号隔开
classclass属性可以指定Bean的具体实现类,其属性值为对象所属类的全路径
scopescope属性用于设定Bean实例的作用范围,其属性值有singleton(单例)、prototype(原型)、request、session、global session

注:id和class是必须要有的。

演示Bean的实例化——构造方法实例化

  1. 创建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>
  1. 编写dao的接口

public interface UserDao {
    void say();
}
  1. 写dao的实现类

public class UserDaoImpl implements UserDao {
    public void say(){
        System.out.println("userDao say hello world!");
    }
}
  1. 写配置文件

<?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>
  1. 测试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的装配

  1. 属性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>
  1. 构造方法注入

使用构造方法注入时,需提供有参的构造方法,并且在配置文件中需要使用<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联合使用

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值