【Spring】基于注解的装配方式

概述

从 Spring 2.5 开始就可以使用注解来配置依赖注入。 可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身。便于升级和维护,提高开发效率

注解的基本用法

先创建一个Spring入门案例:【Spring】Spring入门案例

第一步:开启注解

<?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 https://www.springframework.org/schema/context/spring-context.xsd">
   <!-- 开启注解 配置扫描路径 -->
   <context:component-scan base-package="com.lucas"/>
   <!-- 如果有多个路径 ,号隔开
   <context:component-scan base-package="com.lucas.service,com.lucas.dao"/>-->
</beans>

第二步:创建带注解Java代码

@Component
//等同于@Component("testComponent")或者@Component(value = "testComponent")
public class TestComponent {
    //值的注入
    @Value("张三")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void sayHello(){
        System.out.println("hello world");
    }
}

第三步:添加测试代码

public class App {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        TestComponent testComponent = (TestComponent) applicationContext.getBean("testComponent");
        testComponent.sayHello();
        System.out.println(testComponent.getName());
     }
}

运行结果
在这里插入图片描述

其他注解

除了 前面的案例用我们用到了Component 注解,除了这个注解以为,Spring还提供了还有其他三个功能与Component 一样的注解

@Service 一般用在Service层
@Controller 一般用在控制层
@Repository 一般用在数据库访问层

@Required注解应用于bean属性的setter方法
@Autowired注解可以应用到bean属性的setter方法,非setter方法,构造函数和属性
@Qualifier,通过指定确切的将被引用的bean,@Autowired和@Qualifier注解可以用来删除混乱

综合案例

项目结构如下:
在这里插入图片描述

开启注解

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 https://www.springframework.org/schema/context/spring-context.xsd">
<!--    <context:annotation-config/>-->
    <!-- 开启注解 配置扫描路径 -->
    <context:component-scan base-package="com.lucas.service,com.lucas.dao,com.lucas.controller"/>
</beans>

dao层

public interface UserDao {
    public void selectUser();
}
import org.springframework.stereotype.Repository;

@Repository("userDao")
public class UserDaoImpl implements  UserDao{
    @Override
    public void selectUser() {
        System.out.println("UserDaoImpl -> selectUser");
    }
}

service层

public interface UserService {
    public void selectUser();
}

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service("userService")
public class UserServiceImpl implements UserService{

    @Resource
    private UserDao userDao;

    @Override
    public void selectUser() {
        userDao.selectUser();
        System.out.println("UserServiceImpl -> selectUser");
    }
}

controller层

@Controller
public class UserController {
    @Autowired
    private UserService userService;
    public void selectUser(){
        userService.selectUser();
        System.out.println("UserController -> selectUser");
    }
}

测试代码

public class App {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        UserController userController = (UserController) applicationContext.getBean("userController");
        userController.selectUser();

    }
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/huweiliyi/article/details/107641886