autowire spring configuration file parameter <bean> node can be controlled manner bean automatic assembly
- default - the default mode and "no" the same way
- no - no automatic assembly, required <ref /> node or parameter
- byName - assembled by name
- byType - assembled according to the type
- constructor - is assembled by the constructor
The document explains
Attribute : autowire Controls whether bean properties are "autowired". This is an automagical process in which bean references don't need to be coded explicitly in the XML bean definition file, but rather the Spring container works out dependencies. The effective default is "no". There are 4 modes: 1. "no" The traditional Spring default. No automagical wiring. Bean references must be defined in the XML file via the <ref/> element (or "ref" attribute). We recommend this in most cases as it makes documentation more explicit. Note that this default mode also allows for annotation-driven autowiring, if activated. "no" refers to externally driven autowiring only, not affecting any autowiring demands that the bean class itself expresses. 2. "byName" Autowiring by property name. If a bean of class Cat exposes a "dog" property, Spring will try to set this to the value of the bean "dog" in the current container. If there is no matching bean by name, nothing special happens. 3. "byType" Autowiring if there is exactly one bean of the property type in the container. If there is more than one, a fatal error is raised, and you cannot use byType autowiring for that bean. If there is none, nothing special happens. 4. "constructor" Analogous to "byType" for constructor arguments. If there is not exactly one bean of the constructor argument type in the bean factory, a fatal error is raised. Note that explicit dependencies, i.e. "property" and "constructor-arg" elements, always override autowiring. Note: This attribute will not be inherited by child bean definitions. Hence, it needs to be specified per concrete bean definition. It can be shared through the 'default-autowire' attribute at the 'beans' level and potentially inherited from outer 'beans' defaults in case of nested 'beans' sections (e.g. with different profiles). Data Type : string Default Value : default Enumerated Values : - default - no - byName - byType - constructor
The sample code
1, no way
spring configuration file, using the ref parameter injection bean, setter method of the object must have, here, that is the Person setFr method.
No <property name = "fr" ref = "fr"> </ property> because there is no injection fr attribute, an error will be reported null pointer.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="person" class="constxiong.interview.assemble.Person" autowire="no"> <property name="fr" ref="fr"></property> </bean> <bean id="fr" class="constxiong.interview.assemble.FishingRod"></bean> </beans>
Fishing rod bean
constxiong.interview.assemble Package; / * * * rod * @author ConstXiong * @date 2019-07-17 09:53:15 * / public class FishingRod { / * * * used * / public void Used () { . System OUT .println ( " Fishing ... " ); } }
People bean
package constxiong.interview.assemble; /** * 人 * @author ConstXiong * @date 2019-07-17 09:54:56 */ public class Person { private FishingRod fr; /** * 钓鱼 */ public void fish() { fr.used(); } public void setFr(FishingRod fr) { this.fr = fr; } }
Test code
package constxiong.interview.assemble; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AssembleTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring_assemble.xml"); Person person = (Person)context.getBean("person"); person.fish(); } }
2, byName also requires a corresponding setter method to inject
Modify spring configuration file autowire = "byName"
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="person" class="constxiong.interview.assemble.Person" autowire="byName"></bean> <bean id="fr" class="constxiong.interview.assemble.FishingRod"></bean> </beans>
3, byType also requires a corresponding setter method to inject
Modify spring configuration file autowire = "byType"
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="person" class="constxiong.interview.assemble.Person" autowire="byType"></bean> <bean id="fr" class="constxiong.interview.assemble.FishingRod"></bean> </beans>
Other unchanged
4, constructor without setter method, constructor need to inject the bean
Modify spring configuration file autowire = "byType"
Person class setFr removal method, a method is provided configured to add property fr
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="person" class="constxiong.interview.assemble.Person" autowire="constructor"></bean> <bean id="fr" class="constxiong.interview.assemble.FishingRod"></bean> </beans>
package constxiong.interview.assemble; /** * 人 * @author ConstXiong * @date 2019-07-17 09:54:56 */ public class Person { private FishingRod fr; public Person(FishingRod fr) { this.fr = fr; } /** * 钓鱼 */ public void fish() { fr.used(); } }
1,2,3,4 consistent test results, print
钓鱼...
- Java self-experience
- Java interview questions H5
- Java applets interview questions