原始注解
原始注解用于替代< Bean >的配置,使配置更加灵活简便。
实例化Bean的注解
Component
使用在类上用于实例化Bean(以下三个注解跟此注解功能相同,但具有语义化作用)
//<bean id="userDao" class="com.littlepants.dao.impl.UserDaoImpl"></bean>
@Component("userDao")
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("save running ...");
}
}
Controller
在Web层实例化Bean
Service
在Service层实例化Bean
//<bean id="userService" class="com.littlepants.service.impl.UserServiceImpl">
//@Component("userService")
@Service("userService")
Repository
在Dao层实例化Bean
//<bean id="userDao" class="com.littlepants.dao.impl.UserDaoImpl"></bean>
//@Component("userDao")
@Repository("userDao")
依赖注入的注解
Autowired
在字段(属性)上用于根据类型(字段类型)依赖注入,从Spring容器中进行匹配。如果容器中有多个同类型的Bean,则会报错。属性注入有变量注入,构造器注入,set方法注入。
//变量注入
@Autowired
UserDao userDao;
//构造器注入
private UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao){
this.userDao = userDao;
}
//set方法注入
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
在使用IDEA编程时,变量注入方法会被标注为不被推荐的注入方法。因为这种方式过于依赖容器,当容器没有注入这个对象时,即对象为NULL时,就回找不到此依赖。但其他两种依赖就没有这个问题,所以在使用中应该尽量避免变量注入。
Qualifier
结合@Autowired一起使用,根据名称(id)进行依赖注入
//<bean id="userService" class="com.littlepants.service.impl.UserServiceImpl">
@Component("userService")
public class UserServiceImpl implements UserService {
// <property name="userDao" ref="userDao"></property>
//当包中有两个对UserDao的实现时,单单使用@Autowired会引起错误
//使用@Qualifier,指定ID为userDao的实现
@Qualifier("userDao")
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
System.out.println("Service Running ...");
}
}
Resource
相当于@Autowired+@Qualifier,按照名称进行注入
//在容器中查找与之对应的UserDao
@Resource(name="userDao")
private UserDao = userDao;
//使用Set方法注入
private UserDao userDao;
//@Autowired
@Resource(name = "userDao")
public void setUserDao(UserDao userDao) {
System.out.println("使用set方法");
this.userDao = userDao;
}
Value
注入普通(基本)属性
@Value("Hello World")
private String driver;
//等价于
private String driver="Hello World";
它的使用价值在于,当你在项目中配置了JDBC属性文件时,可以直接读取JDBC文件完成初始化。
//jdbc.properties
jdbc.diver = com.mysql.cj.jdbc.Driver
<!--引入外部配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
@Value(${jdbc.driver})
private String driver;//driver = com.mysql.cj.jdbc.Driver
新注解
非自定义的Bean的配置,加载properties的配置,组件扫描,引入其他配置文件。
Configuration
指定当前类是Spring的配置类,当创建容器时会从该类上加载注解。
ComponentScan
用于指定Spring在初始化容器时要扫描的包,作用与xml配置文件中的< context:component-scan base-package=“com.littlepants” />一样
Bean
使用在方法上,将该方法的返回值存储到Spring容器中。
PropertySource
加载.properties文件中的配置
Import
导入其他配置类