一、IOC的注释方式
1.在applicationContext.xml中配置
<context:component-scan base-package="com.imooc.demo1"/>
2.创建UserService类:
@Component("userService")//设置bean的id public class UserService { public String sayHello(String name){ return "hello"+name; } }
3.测试类里测试:
@Test public void Demo1(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService) context.getBean("userService"); String s = userService.sayHello("zhangsan"); System.out.println(s); }
4.除了Component还有三个功能基本和它相同的注解:
@Repository DAO层
@Service Service层
@Controller Controller层
二、DI的注解方式
1.还是以UserService为例
@Component("userService") public class UserService { @Value("米饭") private String something; public String sayHello(String name){ return "hello"+name; } void eat(){ System.out.println("eat"+something); } //@Autowired //找的是实际的类名而不是bean名称!
//@Qualifier("userDao")//加入Qualifier注解表示根据bean名称来确定类。 @Resource("userDao")//直接使用此注解,相当于前两个注解一起使用。 private UserDao dao; public void save(){ System.out.println("service的保存..."); dao.save(); } }
2.创建UserDao类
@Repository("userDao") public class UserDao { public void save(){ System.out.println("dao保存...."); } }
3.测试
@Test public void Demo3(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService) context.getBean("userService"); userService.save(); }
三、其他注解
1.当bean被载入到容器时调用init方法,销毁时调用destory方法
xml方式是在bean标签中配置init-method方法和destroy-method,而注解方式是使用@PostConstract和@PreDestroy(singleton才有效)
2.bean作用范围的注解
使用@Scope.
四、XML和注解整合使用
xml用于管理类(IOC)
注解用于属性注入(DI)