Spring 针对bean管理中创建对象提供注解
1,@Component:不指定 value 属性,bean 的 id 是类名的首字母小写
2,@Service:用于对 Service 实现类进行注解
3,@Controller:用于对 Controller 实现类进行注解
4,@Repository:用于对 DAO 实现类进行注解
1,为了能够使用注解的方式创建对象,需要引入依赖,如果是导包则需要aop.jar,如果maven则导入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
2,开启组件扫描
<!--开启组件扫面-->
<!--<context:component-scan base-package="com.lishizhan.service,com.lishizhan.dao,com.lishizhan.domain"/>-->
<context:component-scan base-package="com.lishizhan"/>
3,创建类,在类上面添加对象注解
//value:可以不写,默认类名称首字母小写
//@Component(value = "userService") //<bean id="userService" class="">
@Service(value = "userService")
// @Controller(value = "userService")
// @Repository(value = "userService")
public class UserService {
public void test(){
System.out.println("使用注解的方式创建对象");
}
}
4,对扫描器进行设置,扫描和不扫描
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--开启组件扫面-->
<!--<context:component-scan base-package="com.lishizhan.service,com.lishizhan.dao,com.lishizhan.domain"/>-->
<context:component-scan base-package="com.lishizhan"/>
<!--示例一,不全部扫描
use-default-filters:开启指定扫描
context:include-filter:设置扫描的内容
-->
<context:component-scan base-package="com.lishizhan" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--实例二,排除指定的类
context:exclude-filter:设置哪些类不扫描
-->
<context:component-scan base-package="com.lishizhan">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
</beans>
5,注解方式实现属性注入
1,@Autowired:根据属性类型自动注入
2,@Qualifiter:根据属性名称进行注入
3,@Resource:可以根据类型或者根据名称注入
4,@Value:注入普通类型属性
以@Autowired为例:
(1)将service和dao对象创建,在类上添加注解:@Service @Repository
(2)在Service中注入Dao对象,在service中添加dao属性,在属性上使用注解@Autowired
@Service
public class UserService {
//调用dao中的方法之前注入UserDao
@Autowired
private UserDao userDao;
/*@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}*/
public void test(){
System.out.println("使用注解的方式创建对象");
userDao.add();
}
}
以@Qualifiter:根据名称进行注入,注意要和@Autowired一起使用
@Service
public class UserService {
//调用dao中的方法之前注入UserDao
@Autowired
@Qualifier(value = "userDaoImpl1") //根据名称进行注入
private UserDao userDao;
/*@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}*/
public void test(){
System.out.println("使用注解的方式创建对象");
userDao.add();
}
}
以@Resource:可以根据类型或者根据名称注入 他是JDK中的不是spring的
@Service
public class UserService {
//调用dao中的方法之前注入UserDao
// @Autowired
// @Qualifier(value = "userDaoImpl1") //根据名称进行注入
// private UserDao userDao;
// @Resource //根据类型注入
@Resource(name = "userDaoImpl1") //根据名称注入
private UserDao userDao;
/*@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}*/
public void test(){
System.out.println("使用注解的方式创建对象");
userDao.add();
}
}
以@Value:注入普通类型属性
@Service
public class UserService {
@Value(value = "黎仕展")
private String name;
}
6,纯注解开发(了解)
(1)创建配置类代替配置文件
//配置类
@Configuration
@ComponentScan(basePackages = "com.lishizhan")
public class SpringConfg {
}
(2)测试
public class SpringConfgTest {
@Test
public void test(){
//加载配置类
ApplicationContext context =
new AnnotationConfigApplicationContext(SpringConfg.class);
UserService userService = context.getBean("userService", UserService.class);
userService.test();
}
}