基于注解的IOC配置

1 明确

  • 注解配置和XML配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。
  • 关于实际的开发中到底是使用XML还是注解,每家公司有着不同的习惯。具体问题具体分析。

2 环境搭建

2.1 导入所需要的jar包的maven坐标

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>
<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.7</version>
</dependency>
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.4</version>
</dependency>

2.2 使用@Component注解配置管理的资源

  • IAccountService.java
package com.sunxiaping.spring5.service;

import com.sunxiaping.spring5.domain.Account;

public interface IAccountService {

    void save(Account account);

}
  • AcccountServiceImpl.java
package com.sunxiaping.spring5.service.impl;

import com.sunxiaping.spring5.dao.IAccountDao;
import com.sunxiaping.spring5.domain.Account;
import com.sunxiaping.spring5.service.IAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("accountService")
public class AccountServiceImpl implements IAccountService {

    @Autowired
    private IAccountDao accountDao;

    @Override
    public void save(Account account) {
        accountDao.save(account);
    }
}
  • IAccountDao.java
package com.sunxiaping.spring5.dao;

import com.sunxiaping.spring5.domain.Account;

/**
 * 账户的持久层接口
 */
public interface IAccountDao {

    void save(Account account);
}
  • AccountDaoImpl.java
package com.sunxiaping.spring5.dao.impl;

import com.sunxiaping.spring5.dao.IAccountDao;
import com.sunxiaping.spring5.domain.Account;
import org.springframework.stereotype.Component;

@Component("accountDao")
public class AccountDaoImpl implements IAccountDao {

    @Override
    public void save(Account account) {
        System.out.println("保存账户信息");
    }
}
  • 注意:当我使用注解的时候,set方法可以不用写。

2.3 创建spring的xml配置文件并开启对注解的支持

  • applicationContext.xml
<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--告知Spring创建容器的时候要扫描的包-->
    <context:component-scan base-package="com.sunxiaping.spring5"></context:component-scan>


</beans>

2.4 测试

  • 示例:
package com.sunxiaping;


import com.sunxiaping.spring5.service.IAccountService;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class spring5Test {
    ApplicationContext context = null;

    @Before
    public void before() {
        context = new ClassPathXmlApplicationContext("applicationContext.xml");
    }

    @Test
    public void test() {
        IAccountService accountService = context.getBean("accountService", IAccountService.class);
        accountService.save(null);
    }

}

3 常用注解

3.1 用于创建对象的

  • 相当于<bean id="" class="">

3.1.1 @Component

  • 作用:把资源让Spring来管理。相当于在XML中配置一个Bean。

3.1.2 @Controller、@Service、@Repository

  • 这三个注解都是针对@Component注解的衍生注解,他们的作用及属性都是一模一样的。
  • 这三个注解只不过提供了更加明确的语义化。
  • @Controller注解:一般用于表现层的注解。
  • @Service注解:一般用于业务层的注解。
  • @Repository注解:一般用于持久层的注解。
  • 细节:如果注解中有且只有一个属性要赋值,并且名称是value,value在赋值的时候可以不写。

3.2 用于注入数据

相关推荐