spring中注解的自动装配时的id是什么

自动装配的注解

- @Component:组件

  应用场景:这个类确实需要加入IOC容器,但是又不是下面典型的三种情况,其实就是
  你在ApplicationContext.xml里面配置的bean
 <bean id="happyFactoryBean" class="com.etu.spring.component.HappyFactoryBean">
        <property name="factoryName" value="马保国说:年轻人好之为之"/>
 </bean>

- @Controller:控制器

- @Service:对应业务逻辑层的Service类

- @Repository:对应持久化层的Dao或Mapper

从程序运行的角度来说,上面四个注解的作用是一样的,即使标记在了不对应的类上,Spring在运行过程中也不会报错。但是为了我们自己开发过程中不造成不必要的误解,我们还是要标记在正确的类上。

在这里插入图片描述

调用getBean()中对应的id

[1]使用上面注解将类加入IOC容器后,bean的id是类名首字母小写。例如:下面代码中,这个类在IOC容器中的bean的id是taskServiceSimpleImpl


@Service
public class TaskServiceSimpleImpl implements TaskService {
}
[2]指定bean的id
@Service(value = "taskImpl")
public class TaskServiceSimpleImpl implements TaskService {
}

调用getBean时可以

ApplicationContext iocContainer = new 
ClassPathXmlApplicationContext("ApplicationContext.xml");

iocContainer.getBean("taskImpl");//这是指定bean的id
或者
iocContainer.getBean(TaskServiceSimpleImpl.class);
或者
iocContainer.getBean("taskServiceSimpleImp");//这是没指定bean的id

当自动装配时要使用可以

@Autowired
@Qualifier("taskImpl")
private TaskServiceSimpleImpl taskServiceSimpleImpl;
或者
@Autowired
private TaskServiceSimpleImpl taskServiceSimpleImpl;//不管指定或没指定bean的id都可以这样写

@Autowired注解查找目标bean的顺序

  • 第一步:根据类型查找
  • 第二步:根据变量名或方法名作为bean的id查找
    这两种方式都找不到的话,会抛出异常

记录一个特殊的情况(已解决)

  1. 当一个类实现一个接口后,
  2. 这个类的有声明式事务的注解(@Transactional),当我们需要自动装配这个类时(@Autowired),必须装配这个类的接口。
  3. 如果这个类的没有声明式事务的注解,当我们需要自动装配这个类时(@Autowired),可以装配这个类或者这个类的接口。

Spring会为此类基于JDK动态代理技术创建代理对象,创建的代理对象完整类名为com.sun.proxy.$Proxy35 这个的35是随机的

在这里插入代码片
`解决方式操作步骤:

修改applicationContext-service.xml配置文件,开启事务控制注解支持时指定proxy-target-class属性,值为true。其作用是使用cglib代理方式为Service类创建代理对象,添加如下配置:

<!--开启事务控制的注解支持-->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>``
如果用到了dubbo的话,给service注解配置interfaceClass
@Service(interfaceClass = HelloService.class)
@Transactional
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "tom hello " + name;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值