发表于: 2019-08-28 23:54:38
1 566
今日完成
spring注入bean的方法:
依赖注入方式:属性注入和构造函数注入。。另外还有工厂方法注入方式。
可以采用手动装配或自动装配,手动装配比较安全稳定。
手动装配依赖对象分三种,
1、编程对象方式
2、是在XML文件中,通过在bean节点下配置;如上面讲到的使用属性的setter方法注入依赖对象和使用构造器方法注入依赖对象都是这种方式。
3、就是在java代码中使用注解的方式进行装配,在代码中加入@Resource或者@Autowired等,怎样使用注解的方式来为某个bena注入依赖对象呢?
自动装配依赖对象分为2种方式:
1、配置文件的bean中增加autowire
2、也可以选择在beans中加入default-autowire属性,为所有bean设置默认自动装配
Spring中提供了自动装配依赖对象的机制,但是在实际应用中并不推荐使用自动装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。
自动装配是在配置文件中实现的,如下:
<bean id="***" class="***" autowire="byType">
只需要配置一个autowire属性即可完成自动装配,不用再配置文件中写<property>,但是在类中还是要生成依赖对象的setter方法。
Autowire的属性值有如下几个:
· byType 按类型装配 可以根据属性类型,在容器中寻找该类型匹配的bean,如有多个,则会抛出异常,如果没有找到,则属性值为null;
· byName 按名称装配 可以根据属性的名称在容器中查询与该属性名称相同的bean,如果没有找到,则属性值为null;
· constructor 与byType方式相似,不同之处在与它应用于构造器参数,如果在容器中没有找到与构造器参数类型一致的bean,那么将抛出异常;
· autodetect 通过bean类的自省机制(introspection)来决定是使用constructor还是byType的方式进行自动装配。如果发现默认的构造器,那么将使用byType的方式。
一、使用属性setter方法注入
@Data
@Component
public class ImgProperty {
private String endpoint, accessKeyId, accessKeySecret, bucketName;
}
xml文件:(后面迁移到一个新的xml文件里了)
<bean id="imageUp" class="com.diao.util.ImgProperty">
<property name="endpoint" value="http://oss-cn-beijing.aliyuncs.com"/>
<property name="accessKeyId" value="LTAIWD5FSGtC1QOs"/>
<property name="accessKeySecret" value="UnAbBjAD3A4B4JRMNdsKXgfw0O72l8"/>
<property name="bucketName" value="diaoo"/>
</bean>
java:
Resource rs = new FileSystemResource("mapper/application.properties");
BeanFactory factory = new XmlBeanFactory(rs);
ImgProperty imm = (ImgProperty) factory.getBean("imgProperty");
String endpoint = imm.getEndpoint();
String accessKeyId = imm.getAccessKeyId();
String accessKeySecret = imm.getAccessKeySecret();
String bucketName=imm.getBucketName();
然后就成功的报了个错:
后面又改了一下工具类里面获取bean值的方法就可以用了,前面不能用是因为XmlBeanFactory的使用已经过时了,
Resource rs = new ClassPathResource("test.xml");
BeanFactory factory = new DefaultListableBeanFactory();
BeanDefinitionReader bdr = new XmlBeanDefinitionReader((BeanDefinitionRegistry) factory);
bdr.loadBeanDefinitions(rs);
ImgProperty imm = (ImgProperty) factory.getBean("imageUp");
String endpoint = imm.getEndpoint();
String accessKeyId = imm.getAccessKeyId();
String accessKeySecret = imm.getAccessKeySecret();
String bucketName=imm.getBucketName();
spring3.1之手XmlBeanFactory类就被废除了。
XmlBeanFactory继承自DefaultListableBeanFactory。
网上的一些解决方法。
第二种方法,使用construtor方式完成注入。
在配置构造器中用到了<constructor-arg>节点
<beans>
<bean id="imageUp"
class="com.diao.util.ImgProperty">
<constructor-arg index="0" value="http://oss-cn-beijing.aliyuncs.com"/>
<constructor-arg index="1" value="LTAIWD5FSGtC1QOs"/>
<constructor-arg index="2" value="UnAbBjAD3A4B4JRMNdsKXgfw0O72l8"/>
<constructor-arg index="3" value="diaoo"/>
</bean>
</beans>
尝试了一些其他的getBean的方法,但是都没能跑的,就上面那个一直能用。
收获:springBean里面的一些配置方法。
明日计划,再学一下springBean的方面
遇到问题:尝试了一些方法,但是获取不到bean的值
评论