杏坛餐饮网站建站,网站备案掉了什么原因,wordpress 带数据,wordpress504基于注解管理bean 一、标记与扫描1、引入依赖2、创建spring配置文件3、创建组件4、扫描组件4.1、基本扫描#xff1a;4.2、指定要排除的组件4.3、仅扫描指定组件 二、基于注解的自动装配 一、标记与扫描
1、引入依赖
dependencies
!-- 基于Maven依赖传递性… 基于注解管理bean 一、标记与扫描1、引入依赖2、创建spring配置文件3、创建组件4、扫描组件4.1、基本扫描4.2、指定要排除的组件4.3、仅扫描指定组件 二、基于注解的自动装配 一、标记与扫描
1、引入依赖
dependencies
!-- 基于Maven依赖传递性导入spring-context依赖即可导入当前所需所有jar包 --
dependency
groupIdorg.springframework/groupId
artifactIdspring-context/artifactId
version5.3.1/version
/dependency
!-- junit测试 --
dependency
groupIdjunit/groupId
artifactIdjunit/artifactId
version4.12/version
scopetest/scope
/dependency
/dependencies2、创建spring配置文件 3、创建组件
创建控制层组件
Controller
public class UserController {
}创建接口UserService
public interface UserService {
}创建业务层组件UserServiceImpl
Service
public class UserServiceImpl implements UserService {
}创建接口UserDao
public interface UserDao {
}创建持久层组件UserDaoImpl
Repository
public class UserDaoImpl implements UserDao {
}识为业务层组件 Repository将类标识为持久层组件 问以上四个注解有什么关系和区别 Controller、Service、Repository这三个注解只是在Component注解 的基础上起了三个新的名字。 对于Spring使用IOC容器管理这些组件来说没有区别。所以Controller、Service、Repository这 三个注解只是给开发人员看的让我们能够便于分辨组件的作用。 注意虽然它们本质上一样但是为了代码的可读性为了程序结构严谨我们肯定不能随便胡乱标记。
4、扫描组件
4.1、基本扫描 context:component-scan base-packagecom.spring.autowired/context:component-scan4.2、指定要排除的组件 context:component-scan base-packagecom.spring.autowired!-- context:exclude-filter标签指定排除规则 --!--type设置排除或包含的依据typeannotation根据注解排除expression中设置要排除的注解的全类名typeassignable根据类型排除expression中设置要排除的类型的全类名--context:exclude-filter typeannotation expressionorg.springframework.stereotype.Controller/context:exclude-filter typeassignable expressioncom.spring.autowired.controller.UserController//context:component-scan4.3、仅扫描指定组件 context:component-scan base-packagecom.spring.autowired use-default-filtersfalse!-- context:include-filter标签指定在原有扫描规则的基础上追加的规则 --!-- use-default-filters属性取值false表示关闭默认扫描规则 --!-- 此时必须设置use-default-filtersfalse因为默认规则即扫描指定包下所有类 --!--type设置排除或包含的依据typeannotation根据注解排除expression中设置要排除的注解的全类名typeassignable根据类型排除expression中设置要排除的类型的全类名--context:include-filter typeannotation expressionorg.springframework.stereotype.Controller/context:include-filter typeassignable expressioncom.spring.autowired.controller.UserController//context:component-scan测试
Test
public void testAutowireByAnnotation(){
ApplicationContext ac new
ClassPathXmlApplicationContext(applicationContext.xml);
UserController userController ac.getBean(UserController.class);
System.out.println(userController);
UserService userService ac.getBean(UserService.class);
System.out.println(userService);
UserDao userDao ac.getBean(UserDao.class);
System.out.println(userDao);
}注意 组件所对应的bean的id 在我们使用XML方式管理bean的时候每个bean都有一个唯一标识便于在其他地方引用。现在使用注解后每个组件仍然应该有一个唯一标识。 默认情况 类名首字母小写就是bean的id。例如UserController类对应的bean的id就是userController。 自定义bean的id可通过标识组件的注解的value属性设置自定义的bean的id Service(“userService”)//默认为userServiceImpl public class UserServiceImpl implements UserService {}
二、基于注解的自动装配
Autowired注解 在成员变量上直接标记Autowired注解即可完成自动装配不需要提供setXxx()方法。 Autowired注解其他细节 1Autowired注解可以标记在构造器和set方法上 2Autowired工作流程 在这里插入图片描述 首先根据所需要的组件类型到IOC容器中查找
能够找到唯一的bean直接执行装配如果完全找不到匹配这个类型的bean装配失败所需类型匹配的bean不止一个 没有Qualifier注解根据Autowired标记位置成员变量的变量名作为bean的id进行匹配 能够找到执行装配找不到装配失败 使用Qualifier注解根据Qualifier注解中指定的名称作为bean的id进行匹配 能够找到执行装配找不到装配失败
Autowired是Spring框架中的一种注解用于自动装配bean。其中有一个属性required默认值为true。如果在容器中找不到对应的组件则报错。如果属性required的值为false则在容器中找不到对应的组件时不报错。但是实际开发时基本上所有需要装配组件的地方都是必须装配的用不上这个属性。