防止将来遗忘,记录下DI等配置方式。从xml 配置文件 以及注解的方式来配置下DI
xml 配置
测试代码
public class TestBean {@Testpublic void testBean() {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("SpringContextTestBean.xml");User user = applicationContext.getBean("user", User.class);System.out.println(user);}
}
测试结果
上述的实例就是DI
以及IOC
的一种表现。我们将实例化的过程交给了Spring容器来做。就连给属性name赋值都交给了Spring来做。
我们只需要使用getBean来获取实例化后的结果。
那怎么注入引用数据类型呢????
xml 代码实现
测试结果
上述注入引用数据类型都是通过我们自己手动注入,那如果想自动装配怎么处理呢???
xml 实现方式
测试结果
上述示例我们通过bean
中标签属性autowire="byType"
来实现自动装配。通过属性值byType
我们可以知道是通过类型来匹配的。
如果有相同的数据类型实例,会自动注入。
如果两个相同的类型的怎么办呢??? 如下图:
会直接进行报错。
所以我们还有一个别的选项,通过名称autowire="byName"
.
xml 配置方式
说起注解方式就不得不提前几个相关的注解:
@Controller
,@Service
,@Repository
,@Component
。
其实@Controller
都是基于@Component
来实现的
但是还是推荐在开发过程中在mvc阶段使用@Controller
等。因为他们更具有业务意义。
没有任何指向的情况下 可以使用@Component
配置文件 代码
@ComponentScan(basePackages = "plus.chendd")
public class SpringConfig {
}
添加@Controller 代码
@Controller
public class UserController {
}
测试实例
public class TestAnnotate {@Testpublic void testAnnotate() {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);UserController userController = applicationContext.getBean("userController", UserController.class);System.out.println(userController);}
}
@Autowired
方式此注解是通过相同的数据类型来进行装配的。如下代码
但是如果遇到两种相同的数据类型就会出错
@Service
public class UserServiceImpl implements UserService {@Overridepublic void insert() {System.out.println("userServiceImpl insert");}
}
@Service
public class BUserServiceImpl implements UserService {@Overridepublic void insert() {System.out.println("BUserServiceImpl insert");}
}
此时我们就需要注解Qualifier
同时
在注解Autowired
中存在属性required
. 默认是true。在应用初期化时就会按照类型到容器中查找,如果找不到就会报错。如果不想实现这种注入,可以设置为false。
@Qualifier
方式此注解可以用来指定bean id。 可以跟@Autowired 搭配使用,避免出现相同的数据类型自动装配
@Resource
方式@Resource
== @Autowired
都是按数据类型进行装配@Resource(name = "xxx")
= @Autowired + @Qualifier
按指定名称进行装配
其实可以根据名称或是类型进行用来注入。如果两者都没写的话,默认先按名称在容器中进行查找,找不到的话,使用类型进行注入
@Value
注入属性配置类
@ComponentScan(basePackages = "plus.chendd")
@PropertySource("userInfo.properties")
public class SpringConfig {
}
以上就是我们关于Spring 注解简单的内容。主要要是区分:
@Autowired
,@Qualifier
,@Resource
区别。以上的源码参照