发表于: 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的值



返回列表 返回列表
评论

    分享到