类属性的默认值问题

时间:2022-08-26 05:32:55
原来项目中实体类有些属性有默认值,我把默认值移到了properties文件中!在不动原代码的情况下.当实体类new时用spring注入需要的默认值!

该在spring中怎么配置

26 个解决方案

#1


举个例子,比如你要配置的是数据库

<beans>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- 此处是你的properties文件存放的位置 -->
<value>/conf/spring/jdbc.properties</value>
</list>
</property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!-- 下面的database.driver、database.url这种就是你写在你的properties文件里的key,这样就能将得到的值注入到当前这个类的指定属性了 -->
<property name="driverClassName" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</bean>

#2


你说的是让spring去创建bean!但我现在的代码中都是new出来的!

#3


应该是有办法把那些设置的值读出来的

#4


引用 2 楼 xiaofanku 的回复:
你说的是让spring去创建bean!但我现在的代码中都是new出来的!


你new出来了,还怎么注入呀???

要不你就直接用java.util.Properties类读取加载这个属性文件
然后getProperty(String key) 得到你想要的,set到你new出来的对象里~~

#5


new 出来的对象不被Spring接管的吧,就更别提注入了,LS,LZ说要默认值,你这样还是需要手动赋值俄,只不过把value 放到了properties文件...呵呵

#6


引用 5 楼 lyjdamzwf 的回复:
new 出来的对象不被Spring接管的吧,就更别提注入了,LS,LZ说要默认值,你这样还是需要手动赋值俄,只不过把value 放到了properties文件...呵呵

坚持5楼....
用spring直接注释也行,不过也是用properties文件

private String para1

/*
 * @spring.property value = '具体值'
*/
public void setPara1(String para1){
     this.para1 = para1
}

#7


new 出来的对象不能被注入。
要想有默认值,在类定义时就填写默认值。
这个也不影响spring托管对象的注入。

#8


引用 3 楼 sjkof 的回复:
应该是有办法把那些设置的值读出来的

读出来不是问题!关键是怎么在new 对象时把默认值给赋上

#9


引用 4 楼 imasmallbird 的回复:
引用 2 楼 xiaofanku 的回复:
 你说的是让spring去创建bean!但我现在的代码中都是new出来的!


 你new出来了,还怎么注入呀???

 要不你就直接用java.util.Properties类读取加载这个属性文件
 然后getProperty(String key) 得到你想要的,set到你new出来的对象里~~

哪样改的代码量太大不取足!

#10


引用 5 楼 lyjdamzwf 的回复:
new 出来的对象不被Spring接管的吧,就更别提注入了,LS,LZ说要默认值,你这样还是需要手动赋值俄,只不过把value 放到了properties文件...呵呵

算说点正题上!我现在的作法是新建了一个类!让spring去创建这个类!在属性默认值有变动的实体中在无参的构造器中完成赋值操作
实体.属性=新建的类.属性

#11


引用 9 楼 xiaofanku 的回复:
引用 4 楼 imasmallbird 的回复:
引用 2 楼 xiaofanku 的回复:
你说的是让spring去创建bean!但我现在的代码中都是new出来的!


你new出来了,还怎么注入呀???

要不你就直接用java.util.Properties类读取加载这个属性文件
然后getProperty(String key) 得到你想要的,set到你new出来的对象里~~

哪样改的代码量太大不取足!


在new 对象的时候,如果这个类的属性有默认值在执行构造方法体之前,就会把它初始化,
而用spring,是在new 了一个对象之后通过set方法,设置的默认值,
如果你要是想不用spring,然后还不想在类中的属性设置默认值,还想在new对象的时候自动设置默认值,那不可能~~

#12


引用 11 楼 imasmallbird 的回复:
 在new 对象的时候,如果这个类的属性有默认值在执行构造方法体之前,就会把它初始化,
 而用spring,是在new 了一个对象之后通过set方法,设置的默认值,
 如果你要是想不用spring,然后还不想在类中的属性设置默认值,还想在new对象的时候自动设置默认值,那不可能~~

你作不出来并不代表不可能!

#13


引用 12 楼 xiaofanku 的回复:
引用 11 楼 imasmallbird 的回复:

在new 对象的时候,如果这个类的属性有默认值在执行构造方法体之前,就会把它初始化,
而用spring,是在new 了一个对象之后通过set方法,设置的默认值,
如果你要是想不用spring,然后还不想在类中的属性设置默认值,还想在new对象的时候自动设置默认值,那不可能~~

你作不出来并不代表不可能!

呵呵,这话说的怎么向赌着气似的呢???

除了这两种方法,想不到其他的可能,
那你就等吧,要是能有其他的方法,我也学习了!!

#14


   楼主既然是new出来的 就和spring没有关系了 

#15


做梦!

#16


引用 15 楼 java2000_net 的回复:
做梦!

倒!

#17


等我作出来就来结此贴! 类属性的默认值问题

#18


不明白你的意思!

你的意思是不是的new 一个对象的时候,给他的属性赋默认值?

#19


学习了

#20


引用 17 楼 xiaofanku 的回复:
等我作出来就来结此贴!

那完了,这帖子就得等几个月后版主结贴了`~~~~~

#21


spring有这样的功能。但是怎么用早就忘记了。

使用的是${KEY}或是{key}。使用的是properties中的key

#22


引用 21 楼 apollo_ts 的回复:
spring有这样的功能。但是怎么用早就忘记了。

使用的是${KEY}或是{key}。使用的是properties中的key


我在一楼就已经回了,你说的那种方法,但是他想要 new,而不是用spring生成对象~~

#23


给LZ一个思路:

1、假设你的类是叫User,同时在classpath下有一个user.properties文件,且User类中的属性与user.properties属性对应。

2、在类中做一个带是否设置默认值的构造方法:
public User(Boolean isSetDefaultValue){
    InputStream inputStream = getClass().getClassLoader().getResourceAsStream("user.properties");
    并用Properties来装载此流,这样就可以得到属性对应的值;
    用反射方式为对象赋值;
Field[] fs = getClass().getDeclaredFields();
for(Field f : fs){
if(f.getModifiers() == 25){//final字段是不能赋值的
continue;
}
f.set(this, props.getProperty(f.getName())); }
}
3、调用:
User user = new User();//构造一个不带值的user对象
User user = new User(true);//构造一个带默认值的user对象

4、在Spring框架上使用
Spring有构造方法注入,或者用使用constructor和autodetect自动装配。

#24


引用 22 楼 imasmallbird 的回复:
引用 21 楼 apollo_ts 的回复:
 spring有这样的功能。但是怎么用早就忘记了。

 使用的是${KEY}或是{key}。使用的是properties中的key

 我在一楼就已经回了,你说的那种方法,但是他想要new,而不是用spring生成对象~~


这样呀!!LZ的确是在做梦。不改实体代码!!!!

Spring-->后期绑定全局静态属性类-->使用静态字段初始化(这就修改了实体代码了)

#25


结贴吧!免得大家失望!项目接近尾声了!等完了再试验吧!

#26


没有答案!平分吧(对不住班班了)!得分的人:
imasmallbird  
sjkof
lyjdamzwf  
v05120s
liwenso
qq774097676  
blliy117
qiyifi 
APOLLO_TS
zhangjihao

#1


举个例子,比如你要配置的是数据库

<beans>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- 此处是你的properties文件存放的位置 -->
<value>/conf/spring/jdbc.properties</value>
</list>
</property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!-- 下面的database.driver、database.url这种就是你写在你的properties文件里的key,这样就能将得到的值注入到当前这个类的指定属性了 -->
<property name="driverClassName" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</bean>

#2


你说的是让spring去创建bean!但我现在的代码中都是new出来的!

#3


应该是有办法把那些设置的值读出来的

#4


引用 2 楼 xiaofanku 的回复:
你说的是让spring去创建bean!但我现在的代码中都是new出来的!


你new出来了,还怎么注入呀???

要不你就直接用java.util.Properties类读取加载这个属性文件
然后getProperty(String key) 得到你想要的,set到你new出来的对象里~~

#5


new 出来的对象不被Spring接管的吧,就更别提注入了,LS,LZ说要默认值,你这样还是需要手动赋值俄,只不过把value 放到了properties文件...呵呵

#6


引用 5 楼 lyjdamzwf 的回复:
new 出来的对象不被Spring接管的吧,就更别提注入了,LS,LZ说要默认值,你这样还是需要手动赋值俄,只不过把value 放到了properties文件...呵呵

坚持5楼....
用spring直接注释也行,不过也是用properties文件

private String para1

/*
 * @spring.property value = '具体值'
*/
public void setPara1(String para1){
     this.para1 = para1
}

#7


new 出来的对象不能被注入。
要想有默认值,在类定义时就填写默认值。
这个也不影响spring托管对象的注入。

#8


引用 3 楼 sjkof 的回复:
应该是有办法把那些设置的值读出来的

读出来不是问题!关键是怎么在new 对象时把默认值给赋上

#9


引用 4 楼 imasmallbird 的回复:
引用 2 楼 xiaofanku 的回复:
 你说的是让spring去创建bean!但我现在的代码中都是new出来的!


 你new出来了,还怎么注入呀???

 要不你就直接用java.util.Properties类读取加载这个属性文件
 然后getProperty(String key) 得到你想要的,set到你new出来的对象里~~

哪样改的代码量太大不取足!

#10


引用 5 楼 lyjdamzwf 的回复:
new 出来的对象不被Spring接管的吧,就更别提注入了,LS,LZ说要默认值,你这样还是需要手动赋值俄,只不过把value 放到了properties文件...呵呵

算说点正题上!我现在的作法是新建了一个类!让spring去创建这个类!在属性默认值有变动的实体中在无参的构造器中完成赋值操作
实体.属性=新建的类.属性

#11


引用 9 楼 xiaofanku 的回复:
引用 4 楼 imasmallbird 的回复:
引用 2 楼 xiaofanku 的回复:
你说的是让spring去创建bean!但我现在的代码中都是new出来的!


你new出来了,还怎么注入呀???

要不你就直接用java.util.Properties类读取加载这个属性文件
然后getProperty(String key) 得到你想要的,set到你new出来的对象里~~

哪样改的代码量太大不取足!


在new 对象的时候,如果这个类的属性有默认值在执行构造方法体之前,就会把它初始化,
而用spring,是在new 了一个对象之后通过set方法,设置的默认值,
如果你要是想不用spring,然后还不想在类中的属性设置默认值,还想在new对象的时候自动设置默认值,那不可能~~

#12


引用 11 楼 imasmallbird 的回复:
 在new 对象的时候,如果这个类的属性有默认值在执行构造方法体之前,就会把它初始化,
 而用spring,是在new 了一个对象之后通过set方法,设置的默认值,
 如果你要是想不用spring,然后还不想在类中的属性设置默认值,还想在new对象的时候自动设置默认值,那不可能~~

你作不出来并不代表不可能!

#13


引用 12 楼 xiaofanku 的回复:
引用 11 楼 imasmallbird 的回复:

在new 对象的时候,如果这个类的属性有默认值在执行构造方法体之前,就会把它初始化,
而用spring,是在new 了一个对象之后通过set方法,设置的默认值,
如果你要是想不用spring,然后还不想在类中的属性设置默认值,还想在new对象的时候自动设置默认值,那不可能~~

你作不出来并不代表不可能!

呵呵,这话说的怎么向赌着气似的呢???

除了这两种方法,想不到其他的可能,
那你就等吧,要是能有其他的方法,我也学习了!!

#14


   楼主既然是new出来的 就和spring没有关系了 

#15


做梦!

#16


引用 15 楼 java2000_net 的回复:
做梦!

倒!

#17


等我作出来就来结此贴! 类属性的默认值问题

#18


不明白你的意思!

你的意思是不是的new 一个对象的时候,给他的属性赋默认值?

#19


学习了

#20


引用 17 楼 xiaofanku 的回复:
等我作出来就来结此贴!

那完了,这帖子就得等几个月后版主结贴了`~~~~~

#21


spring有这样的功能。但是怎么用早就忘记了。

使用的是${KEY}或是{key}。使用的是properties中的key

#22


引用 21 楼 apollo_ts 的回复:
spring有这样的功能。但是怎么用早就忘记了。

使用的是${KEY}或是{key}。使用的是properties中的key


我在一楼就已经回了,你说的那种方法,但是他想要 new,而不是用spring生成对象~~

#23


给LZ一个思路:

1、假设你的类是叫User,同时在classpath下有一个user.properties文件,且User类中的属性与user.properties属性对应。

2、在类中做一个带是否设置默认值的构造方法:
public User(Boolean isSetDefaultValue){
    InputStream inputStream = getClass().getClassLoader().getResourceAsStream("user.properties");
    并用Properties来装载此流,这样就可以得到属性对应的值;
    用反射方式为对象赋值;
Field[] fs = getClass().getDeclaredFields();
for(Field f : fs){
if(f.getModifiers() == 25){//final字段是不能赋值的
continue;
}
f.set(this, props.getProperty(f.getName())); }
}
3、调用:
User user = new User();//构造一个不带值的user对象
User user = new User(true);//构造一个带默认值的user对象

4、在Spring框架上使用
Spring有构造方法注入,或者用使用constructor和autodetect自动装配。

#24


引用 22 楼 imasmallbird 的回复:
引用 21 楼 apollo_ts 的回复:
 spring有这样的功能。但是怎么用早就忘记了。

 使用的是${KEY}或是{key}。使用的是properties中的key

 我在一楼就已经回了,你说的那种方法,但是他想要new,而不是用spring生成对象~~


这样呀!!LZ的确是在做梦。不改实体代码!!!!

Spring-->后期绑定全局静态属性类-->使用静态字段初始化(这就修改了实体代码了)

#25


结贴吧!免得大家失望!项目接近尾声了!等完了再试验吧!

#26


没有答案!平分吧(对不住班班了)!得分的人:
imasmallbird  
sjkof
lyjdamzwf  
v05120s
liwenso
qq774097676  
blliy117
qiyifi 
APOLLO_TS
zhangjihao