IOC操作Bean管理(基于注解方式)
一、什么是注解
1、注解就是代码特殊标记,格式@:注解名称(属性名称=属性值,属性名称=属性值)
2、使用注解,注解作用在类上面,方法上面,属性上面
3、使用注解的目的:简化xml配置
二、spring针对bean管理中创建对象提供注解
1、@Component
2、@Service
3、@Controller
4、@Repository
- 上面四个注解功能是一样的,都可以用来创建Bean实例
三、基于注解方式实现对象的创建
1、第一步引入依赖
2、开启组件扫面
如果扫面多个包,可以用逗号隔开,或是扫描包的上层目录
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<content:component-scan base-package="com.lds.springdemo.ldstest">
</content:component-scan>
</beans>
3、创建类,在类上面添加创建对象注解
/**
* @Component(value = "ldsService") value 值可以不写,不写就是会
* 默认为类名称首字母小写:ldsService
*/
@Component(value = "ldsService")
public class LdsService {
public void add() {
System.out.println("LdsService add...");
}
}
四、开启组件扫面细节配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--示例一:use-default-filters表示现在不使用默认filter,自己配置filter
include-filter 设置扫面那些内容-->
<content:component-scan base-package="com.lds.springdemo.ldstest" use-default-filters="false">
<content:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</content:component-scan>
<!--示例二:下面配置扫面包所有内容
content:exclude-filter 设置哪些内容不进行扫描
-->
<content:component-scan base-package="com.lds.springdemo.ldstest" use-default-filters="false">
<content:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</content:component-scan>
</beans>
五、基于注解方式实现属性注入
1、@Autowired:根据属性类型进行自动装配
第一步:把service和dao对象创建,在service和dao类添加对象注解
在service注入dao对象,在service类添加dao类型属性,在属性上面使用注解
service层
@Service
public class LdsService {
/**
* 定义dao类型属性
* 不需要添加set方法
* 添加注入属性注解
*/
@Autowired
private LdsDao ldsDao;
public void add() {
System.out.println("LdsService add...");
}
}
Dao接口
public interface LdsDao {
void add();
}
Dao接口实现类1
@Repository("ldsDaoImpl01 ")
public class LdsDaoImpl01 implements LdsDao {
public void add() {
System.out.println("LdsDaoImpl01 add...");
}
}
2、@Qualifier:根据属性名称进行注入
这个@Qualifier注解的使用,和@Autowired一起使用
一个接口可有多个实现类
- Dao接口实现类2
@Repository("ldsDaoImpl02 ")
public class LdsDaoImpl02 implements LdsDao {
public void add() {
System.out.println("LdsDaoImpl02 add...");
}
}
@Qualifier注解使用演示
@Service
public class LdsService {
/**
* 定义dao类型属性
* 不需要添加set方法
* 添加注入属性注解
*/
@Autowired
@Qualifier(value = "ldsDaoImpl01")
private LdsDao ldsDao;
public void add() {
System.out.println("LdsService add...");
ldsDao.add();
}
}
3、@Resource:可以根据类型注入,可以根据名称注入
@Service
public class LdsService {
/**
* 定义dao类型属性
* 不需要添加set方法
* 添加注入属性注解
*/
//@Resource 这么写就是根据类型进行注入
@Resource(name = "ldsDaoImpl01")//这么写就是根据名称进行注入
private LdsDao ldsDao;
public void add() {
System.out.println("LdsService add...");
ldsDao.add();
}
}
4、@Value:普通类型注入
@Value(value="abc")
private String name;
六、完全注解方式开发
无需配置文件
1、创建配置类,替代xml文件
/**
* @Description: Spring配置类
* @Author: lds
* @Date: 2020/12/14
*/
@Configuration //作为配置类,替代xml配置文件
@ComponentScan(basePackages = "com.lds.springdemo")
public class SpringConfigDemo {
}
2、编写测试类
/**
* @author LDS
* 测试类
*/
public class DemoConfigTest {
@Test
public void test() {
//1、加载配置类
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfigDemo.class);
//2、获取配置创建的对象
LdsService ldsService = context.getBean("ldsService", LdsService.class);
ldsService.add();
}
}