<context:component-scan base-package="com.zb(此处引号内填写需要扫描的最大的路径)" />
在spring_mybatis.xml和spring_mvc.xml中写入上述的一句代码
作用:自动扫描基准包(base-package)下的以及子包下的所有注解
1. @Service
@Service用于标注业务层组件
如果有一个类带了@Service注解,将自动注册到Spring Ioc容器,不需要再在applicationContext里面定义bean了。
1.带括号
@Service("userService")
public class UserServiceImpl implements UserService{
...
}
2.不带括号
@Service
public class UserServiceImpl implements UserService{
...
}
@Service后边带("xxx")的,表示给当前类命名一个别名,方便注入到其他需要用到的类中;
也可以不指定,不加的话,默认别名就是当前类名,但是首字母小写,例:userServiceImpl
2. @Autowired 自动注入/装配
@Autowired 注释:它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
通过 @Autowired的使用来消除 set ,get方法。
此处作简要介绍,@Autowired详解见此博客:https://blog.csdn.net/u013257679/article/details/52295106
3. @param
//Java代码
public User login(@Param("userCode") String userCode, @Param("userPassword") String userPassword);
---------------------------------
<!-- xml代码 -->
<!-- 用户登录 参数以@param的方式传入,返回值:用户 -->
<select id="login" resultType="User">
SELECT * FROM `smbms_user`
WHERE `userCode`=#{userCode} AND `userPassword`=#{userPassword}
</select>
在Java代码中用@param取别名,
作用:
(1) 取别名,传给xml文件中的sql语句,可以与原来的形式参数名不同;
(2) 当取别名时,xml文件中接受别名,可以传多个参数,理论来讲可以传很多个参数,但是建议超过4个参数,最好用Map或者对象传递。
4. @Qualifier
需求:
因为@Autowired默认是根据类型进行注入的,因此如果有多个类型一样的Bean候选者,则需要限定其中一个候选者,否则将抛出异常。
@Qualifier限定描述符能根据名字进行注入,通过这个描述符,表明了哪个实现类才是我们所需要的,我们修改调用代码,添加@Qualifier注解,需要注意的是@Qualifier的参数名称必须为注册过的或者用注解标示过的别名,例子如下:
@Autowired
@Qualifier("userMapper")
private UserMapper userMapper;
@Qualifier("roleMapper")
private RoleMapper roleMapper;
//此处使用@Qualifier用以区分Bean
此处的userMapper和roleMapper在笔者的spring_mybatis.xml中,用扫描自动自动注册的方式进行了注册了
<!--
MapperScannerConfigurer自动扫描com.zb.mapper包下的以及子包下的所有映射器(mapper)接口,并自动注册为MapperFactoryBean;
basePackage:指定扫描的基准包
UserMapper接口在com.zb.mapper路径下,所以自动扫描注册,并取默认别名:userMapper
RoleMapper接口在com.zb.mapper路径下,所以自动扫描注册,并取默认别名:roleMapper
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zb.mapper" />
</bean>
注:@Qualifier的用法不只此一种,此处只是列举笔者使用的方式;
详细推荐博客:https://blog.csdn.net/lovin_fang/article/details/78537547
其他
@Controller用于标注控制层组件(如struts中的action),@Repository用于标注数据访问组件,即DAO组件,而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。