利用注解注册Bean
创建配置文件,并添加context约束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.spring.test.service"/>
</beans>
在需要实例化的类上添加注解@Component(value = "")
即可加载到Spring框架中,除了@Component
Spring还提供了3种基本的注解,这三种注解与@Component
等效,分别为对DAO实现类进行注解的@Repository
,对Service实现类进行注解的@Service
和对Controller实现类注解的@Controller
。例如:创建一个业务接口和对应的实现类
package com.spring.test.service;
public interface UserService {
void hello();
}
package com.spring.test.service.impl;
import com.spring.test.service.UserService;
import org.springframework.stereotype.Service;
@Service(value = "userService")
public class UserServiceImpl implements UserService {
@Override
public void hello() {
System.out.println("Hello World");
}
}
属性注入
如果通过XML方式进行属性注入,都需要依靠属性的setter方法,而对于注解来说,可以直接在属性的上方添加注解为属性赋值,不需要再依靠setter方法。
其中注解注入方式分为以下三种
@Autowired
@Autowired
可以自动按照默认的类型进行注入,即属性的类型与Bean相同时,会忽略Bean的名称,直接匹配注入。例如:
在UserServiceImpl实现类中调用dao层的save方法
package com.spring.test.service.impl;
import com.spring.test.dao.UserDao;
import com.spring.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service(value = "userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void save() {
userDao.save();
System.out.println("userService的save方法执行...");
}
}
package com.spring.test.dao;
import org.springframework.stereotype.Repository;
@Repository(value = "userDao111")
public class UserDao {
public void save() {
System.out.println("userDao的save方法执行");
}
}
无论UserDao类添加的注解名称是什么都可以寻找到对应的属性
@Qualifier
与@Autowired
不同,@Qualifier
必须要指定已经存在的Bean名称,才能完成注入。例如:
package com.spring.test.service.impl;
import com.spring.test.dao.UserDao;
import com.spring.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service(value = "userService")
public class UserServiceImpl implements UserService {
@Qualifier("userDao")
private UserDao userDao;
@Override
public void save() {
userDao.save();
System.out.println("userService的save方法执行...");
}
}
package com.spring.test.dao;
import org.springframework.stereotype.Repository;
@Repository(value = "userDao")
public class UserDao {
public void save() {
System.out.println("userDao的save方法执行");
}
}
@Resource
Spring提供对JSR-250中定义的@Resource
注解的支持,且与@Autowired
功能类似,也可指定指定的Bean的名称
其他注解
@PostConstruct
:在初始化方法上使用,bean被加载到容器中时调用,类似于XML的init-method
属性@PreDestroy
:在销毁方法上使用,类似于XML中的destroy-method
属性@Scope
:标识bean的作用范围,值与XML中的一致
XML与注解的配合开发
综合两种方式的优点,XML配置结构清晰,易于阅读;注解的方式开发便捷,易于属性的注入。所以在日常开发时,一般使用XML用来管理Bean,使用注解为注入属性值。
使用注解注入时要注意在配置文件中加入context约束,并开启注解注入即添加
context:annotation-config
标签