This week's book giveaway is in the Java 8 forum.
We're giving away four copies of Java 8 in Action and have Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft on-line!
See this thread for details.
The moose likes Spring and the fly likes getting same result in AutoWiring byType and byName Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Java 8 in Action this week in the Java 8 forum!
JavaRanch » Java Forums » Frameworks » Spring
Bookmark "getting same result in AutoWiring byType and byName " Watch "getting same result in AutoWiring byType and byName " New topic
Author

getting same result in AutoWiring byType and byName

prasad chowdary
Greenhorn

Joined: Feb 18, 2012
Posts: 18
hi experts,

In my application im getting same results in autowiring(byname and byType) .please see my code.



Address.java

package info.spring.test;

public class Address {
private String city;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
private String state;
}


Student.java

package info.spring.test;

public class Student {

private String name;
private Address address1;
private Address address2;
private int roll_No;


public int getRoll_No() {
return roll_No;
}

public void setRoll_No(int rollNo) {
roll_No = rollNo;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Address getAddress1() {
return address1;
}

public void setAddress1(Address address1) {
this.address1 = address1;
}

public Address getAddress2() {
return address2;
}

public void setAddress2(Address address2) {
this.address2 = address2;
}


public void details(){

System.out.println("student roll_no:"+roll_No);
System.out.println("Student name:"+name);
System.out.println("Temparary address:"+address1.getCity()+'\t'+address1.getState());
System.out.println("paramenent Address:"+address2.getCity()+'\t'+address2.getState());
}

}


config.xml

<bean id="std" class="info.spring.test.Student" autowire="byType">
<property name="name" value="sachin"></property>
<property name="roll_No" value="99"></property>

</bean>

<bean id="address1" class="info.spring.test.Address" >
<property name="city" value="hyd"></property>
<property name="state" value="ap"></property>
</bean>

<bean id="address2" class="info.spring.test.Address">
<property name="city" value="banglr"></property>
<property name="state" value="karnataka"></property>
</bean>
</beans>

output

getting both address objects


Thanks in Advance.


Piyush Mangal
Ranch Hand

Joined: Jan 22, 2007
Posts: 196
Can you post the complete code. You should have got an exception (see below from spring documentation) as there are more than one Address type bean defined.


byType Allows a property to be autowired if there is exactly one bean of the property type in the container. If there is more than one, a fatal exception is thrown, and this indicates that you may not use byType autowiring for that bean. If there are no matching beans, nothing happens; the property is not set. If this is not desirable, setting the dependency-check="objects" attribute value specifies that an error should be thrown in this case.
prasad chowdary
Greenhorn

Joined: Feb 18, 2012
Posts: 18
thanks piyush,

iam not getting any exception.
this is my main program go through it.



MyApp.java



package info.spring.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyApp {

public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = (Student)context.getBean("std");

student.details();
}

}
Piyush Mangal
Ranch Hand

Joined: Jan 22, 2007
Posts: 196
I tried running your code and getting the following expected exception.

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'std' defined in class path resource [config.xml]: Unsatisfied dependency expressed through bean property 'address1': : No unique bean of type [info.spring.test.Address] is defined: expected single matching bean but found 2: [address1, address2]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [info.spring.test.Address] is defined: expected single matching bean but found 2: [address1, address2]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1167)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1059)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at info.spring.test.MyApp.main(MyApp.java:10)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [info.spring.test.Address] is defined: expected single matching bean but found 2: [address1, address2]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:796)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1152)
... 13 more



Where is your applicationContext.xml located?
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: getting same result in AutoWiring byType and byName
 
Similar Threads
Generating user details in form as ReadOnly
Websphere Studio Error : MQJMS1061: Unable to deserialize object
Foreign key must have same number of columns
got an exception in configuration file
Annotations exception