Spring的Bean管理(注解方式)
Spring的Bean管理(注解方式)
使用@Component 描述Spring框架中的Bean
使用注解定义Bean
@Component 描述Spring框架中的Bean
xml文件的头(约束)
<?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 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.imooc"/>
- 在UserService类中,加上@Component("userService"),括号里面是bean的名字
@Component("userService") public class UserServices { public String sayHello(String name) { return "Hello " + name; }
- 在测试类中:
public void demo1() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserServices userServices = (UserServices) applicationContext.getBean("userService"); String s = userServices.sayHello("牛"); System.out.println(s); }
测试类中与在xml中的配置方法是一致的
另外3个功能基本等效的注解
- @Repository 用于对DAO实现类进行标注
- @Service 用于对Service实现类进行标注
- @Controller 用于对Controller实现类进行标注
Spring的属性注入-注解方式
1.简单类型的@value("") 注意在类名下方
2.对象值得注入@Autowired 默认按照类型进行注入 注意在属性值前面,而且没有值
如果存在两个相同Bean类型,则按照名称注入
@Autowired注入时可以针对成员变量或者set方法
@Component("userService") public class UserServices { @Value("米饭") private String something; @Autowired private UserDao userDao; public String sayHello(String name) { return "Hello " + name; } public void eat() { System.out.println("eat :" + something); } public void save() { System.out.println("service 中保存用户的方法"); userDao.save(); } }
3.通过@Autowired的required属性,设置一定要找到匹配的Bean
使用@Qualifier 指定注入Bean的名称
两个标签一起使用,保证@Autowired注入的和注解Bean:UserDao设置的名称必须一致- 4.上述两行可以使用@Resource(name="Bean的名称"),一个标签搞定 **
其他注解
- 4.上述两行可以使用@Resource(name="Bean的名称"),一个标签搞定 **
使用注解开发时候,默认作用范围都是singleton,可以使用@Scope注解用于指定Bean的作用范围
xml配置和注解配置混合使用