ioc的注解开发

布满荆棘的人生 2022-05-09 10:12 228阅读 0赞

xml开发与ioc开发的优缺点

  1. xml管理bean比较容易,但配置麻烦
  2. 使用ioc注解就比较难管理,的到类内部去看具体的注解,但操作简单
  3. 一般都是两种结合一起开发

使用之前

必须添加约束之类的,直接贴代码吧

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. <!-- xsi:schemaLocation是约束-->
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd">
  10. <!--开启注解扫描,加上才能用ioc注解-->
  11. <context:component-scan base-package="ioc的注解开发"/>
  12. </beans>

常用到的注释

@Component(id)加载类的前面,与此相似的还有
@Controller :加在WEB 层
@Service :业务层
@Repository :持久层

  1. @Component("user")
  2. @Scope("singleton")
  3. /*
  4. * 相当于在xml配置bean即
  5. * <bean id="user" class="ioc的注解开发.userDao" />
  6. * */
  7. public class userDao {
  8. private String name;
  9. public userDao() {
  10. }
  11. public userDao(String name) {
  12. this.name = name;
  13. }
  14. @PostConstruct
  15. public void init(){
  16. System.out.println(name+"被初始化");
  17. }
  18. @PreDestroy
  19. public void destory(){
  20. System.out.println(name+"被销毁");
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. @Value("鲁班七号") //赋值
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. public void save() {
  30. System.out.println("在user里执行了save");
  31. }
  32. }

@Scope
指定bean的作用范围(默认singleton,还有prototype,session…)
@PostConstruct 指定bean的初始化
@PreDestroy 指定bean的销毁方法

类的属性依赖注入(可以省去set方法)
对于变量使用
@Value(value)
对于对象
@Resource(相当于@Qualifier+@Autowired ) 注解默认按名称装配。名称 可以通过name属性指定,如果没有指定name属性,
默认取属性的名称作为bean名称寻找依赖对象
@Qualifier(“user”) 和@Autowired配合使用 指定名称
@Autowired 指定类型

测试一下吧
下面是代码

  1. package ioc的注解开发;
  2. import org.springframework.stereotype.Controller;
  3. import javax.annotation.Resource;
  4. /**
  5. * Created by Administrator on 2018/10/6.
  6. */
  7. @Controller("user2")
  8. public class userDao2 {
  9. @Resource(name="user")
  10. private userDao user;
  11. public void save(){
  12. System.out.println("在user2里执行了save");
  13. user.save();
  14. }
  15. }

测试代码

  1. package ioc的注解开发;
  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. import org.springframework.test.context.ContextConfiguration;
  7. import javax.annotation.Resource;
  8. /**
  9. * Created by Administrator on 2018/10/5.
  10. */
  11. public class testDemo {
  12. @Test
  13. public void testDemo1(){
  14. ClassPathXmlApplicationContext apc=new ClassPathXmlApplicationContext("/ioc的注解开发/test.xml");
  15. userDao user= (userDao) apc.getBean("user");
  16. System.out.println(user.getName());
  17. apc.close();
  18. }
  19. @Test
  20. public void testDemo2(){
  21. /*
  22. @Resource相当为属性指定了依赖,Spring会自动为user注入依赖
  23. */
  24. ClassPathXmlApplicationContext apc=new ClassPathXmlApplicationContext("/ioc的注解开发/test.xml");
  25. userDao2 user2= (userDao2) apc.getBean("user2");
  26. user2.save();
  27. apc.close();
  28. }
  29. }

运行testDemo()
70

发表评论

表情:
评论列表 (有 0 条评论,228人围观)

还没有评论,来说两句吧...

相关阅读