7、Spring之基于注解管理bean

7、Spring之基于注解管理bean

本质上:所有一切的操作都是Java代码来完成的,XML和注解只是告诉框架中的Java代码如何执行。

7.1、环境搭建

创建名为spring_ioc_annotation的新module,过程参考3.1节

7.1.1、创建spring配置文件

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">

7.1.2、创建UserDao接口及实现类

package org.rain.spring.dao;

/**

* @author liaojy

* @date 2023/8/5 - 18:32

*/

public interface UserDao {

}

package org.rain.spring.dao.impl;

import org.rain.spring.dao.UserDao;

/**

* @author liaojy

* @date 2023/8/5 - 18:33

*/

public class UserDaoImpl implements UserDao {

}

7.1.3、创建UserService接口及实现类

package org.rain.spring.service;

/**

* @author liaojy

* @date 2023/8/5 - 18:35

*/

public interface UserService {

}

package org.rain.spring.service.impl;

import org.rain.spring.service.UserService;

/**

* @author liaojy

* @date 2023/8/5 - 18:36

*/

public class UserServiceImpl implements UserService {

}

7.1.4、创建UserController

package org.rain.spring.controller;

/**

* @author liaojy

* @date 2023/8/5 - 18:38

*/

public class UserController {

}

7.2、注解和扫描

7.2.1、标识组件的常用注解

注解

含义

@Component

将类标识为普通组件

@Controller

将类标识为控制层组件

@Service

将类标识为业务层组件

@Repository

将类标识为持久层组件

@Controller、@Service、@Repository这三个注解只是在@Component注解的基础上起了三个新的名字

从Spring使用IOC容器管理bean组件的角度来看,这四个组件注解没有区别

@Controller、@Service、@Repository这三个注解只是为了让开发人员便于分辨组件的作用

7.2.2、使用组件注解

7.2.2.1、@Controller注解

package org.rain.spring.controller;

import org.springframework.stereotype.Controller;

/**

* @author liaojy

* @date 2023/8/5 - 18:38

*/

@Controller

public class UserController {

}

7.2.2.2、@Service注解

注意:组件注解只能用于实现类,不能用于接口;因为bean的class属性只能是实现类,不能是接口

package org.rain.spring.service.impl;

import org.rain.spring.service.UserService;

import org.springframework.stereotype.Service;

/**

* @author liaojy

* @date 2023/8/5 - 18:36

*/

@Service

public class UserServiceImpl implements UserService {

}

7.2.2.3、@Repository注解

注意:组件注解只能用于实现类,不能用于接口;因为bean的class属性只能是实现类,不能是接口

package org.rain.spring.dao.impl;

import org.rain.spring.dao.UserDao;

import org.springframework.stereotype.Repository;

/**

* @author liaojy

* @date 2023/8/5 - 18:33

*/

@Repository

public class UserDaoImpl implements UserDao {

}

7.2.3、扫描组件注解

注意:为了减少扫描的耗时,推荐尽可能精确地指定package

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">

7.2.4、测试

package org.rain.spring.test;

import org.junit.Test;

import org.rain.spring.controller.UserController;

import org.rain.spring.dao.UserDao;

import org.rain.spring.service.UserService;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**

* @author liaojy

* @date 2023/8/5 - 19:18

*/

public class IOCByAnnotationTest {

@Test

public void testAutowireByAnnotation(){

ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-ioc-annotation.xml");

UserController userController = ioc.getBean(UserController.class);

System.out.println(userController);

UserService userService = ioc.getBean(UserService.class);

System.out.println(userService);

UserDao userDao = ioc.getBean(UserDao.class);

System.out.println(userDao);

}

}

7.3、高级扫描

7.3.1、排除扫描指定组件

7.3.1.1、方式一:根据注解指定排除(常用)

7.3.1.2、方式二:根据类型指定排除

7.3.2、仅扫描指定组件

7.3.2.1、方式一:根据注解指定包含(常用)

7.3.2.2、方式二:根据类型指定包含

7.4、注解组件的id

7.4.1、默认情况

通过注解+扫描所配置的bean的id,默认值为类的小驼峰;即UserController类对应的bean的id就是userController

7.4.2、自定义

可通过标识组件的注解的value属性设置自定义的bean的id

相关推荐

10首年度神曲!车载音乐必备,每一首都让人心动不已
茅台52度酒多少钱 茅台52度酒价格表及图片
365bet娱乐app

茅台52度酒多少钱 茅台52度酒价格表及图片

📅 07-28 👀 7769
和服十大品牌排行榜
365bet电子游戏

和服十大品牌排行榜

📅 10-31 👀 9211
《梦三国2》神兵值增加方式介绍一览
365bet电子游戏

《梦三国2》神兵值增加方式介绍一览

📅 09-19 👀 2409
为何复合膜在生产时会卷曲?这次弄懂了!
365网站平台网址

为何复合膜在生产时会卷曲?这次弄懂了!

📅 02-15 👀 4445
流产哪个医院比较安全?快来了解
365bet娱乐app

流产哪个医院比较安全?快来了解

📅 01-07 👀 6901
吃麻辣烫会不会长胖
365网站平台网址

吃麻辣烫会不会长胖

📅 08-14 👀 5618
鑫英文翻译
365网站平台网址

鑫英文翻译

📅 01-06 👀 3667
SMH 在文本中是什么意思?2025 年最流行的俚语
365bet电子游戏

SMH 在文本中是什么意思?2025 年最流行的俚语

📅 02-16 👀 4259