Spring代码实例系列-04:autowire自动装配合集
2018-01-07 17:36
639 查看
超级通道:Spring代码实例系列-绪论
自动装配(autowire)有两大类共计9中方式,分别是:
下面分别进行展示
自动装配(autowire)有两大类共计9中方式,分别是:
序号 | 大类 | 方式 | 备注 |
---|---|---|---|
1 | xml | no | 默认方式,通过ref属性,可以不指定autowire属性,其实就是byType |
2 | xml | byType | 指定autowire=byType属性,setter注入 |
3 | xml | byName | 指定autowire=byName属性,setter注入 |
4 | xml | constructor | 指定autowire=constructor属性,constructor注入 |
5 | xml | autodetect | 指定autowire=autodetect属性,先按constructor装配,再按byType装配 |
6 | @Autowire | byType | 通过@Autowire注解字段 |
7 | @Autowire | byName | 通过@Autowire注解字段,通过@Qualifier注解名称 |
8 | @Autowire | method | 通过@Autowire注解setter |
9 | @Autowire | constructor | 通过@Autowire注解constructor |
0.程序目录
project \---src \---main \---java | \---pers | \---hanchao | \---autowire | \---App.java | \---MyFavoriteAutowireType.java | \---MyFavoriteAutowireTypeByAnnotation.java | \---DefaultAutoWire.java | \---ByTypeAutoWire.java | \---ByNameAutoWire.java | \---ConstructorAutoWire.java | \---AutodetectAutoWire.java \---resources \---spring-config \---spring-autowire \---spring-autowire-default.xml \---spring-autowire-bytype.xml \---spring-autowire-byname.xml \---spring-autowire-constructor.xml \---spring-autowire-autodetect.xml \---spring-autowire-annotation.xml
1.以xml形式,autowire=no进行装配
1.1.App.java
package pers.hanchao.autowire; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * <p>spring构造注入示例:通过配置xml中的constructor-arg标签</p> * @author hanchao 2018/1/7 12:32 **/ public class App { public static void main(String[] args) { //默认的自动装配类型:通过setter注入的形式,在xml中指定ref属性,实现自动装配 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config/spring-autowire/spring-autowire-default.xml"); MyFavoriteAutowireType myFavoriteAutowireType = (MyFavoriteAutowireType) context.getBean("myFavoriteAutowireType"); myFavoriteAutowireType.showMyFavoriteAutowireType(); } }
1.2.spring-autowire-default.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--默认的自动装配类型--> <bean id="myFavoriteAutowireType" class="pers.hanchao.autowire.MyFavoriteAutowireType" autowire="no"> <property name="defaultAutoWire" ref="defaultAutoWire"/> </bean> <bean id="defaultAutoWire" class="pers.hanchao.autowire.DefaultAutoWire"/> </beans>
1.3.MyFavoriteAutowireType.java
package pers.hanchao.autowire; public class MyFavoriteAutowireType { public MyFavoriteAutowireType() { } private DefaultAutoWire defaultAutoWire; //通过setter注入 public void setDefaultAutoWire(DefaultAutoWire defaultAutoWire) { this.defaultAutoWire = defaultAutoWire; } public void showMyFavoriteAutowireType(){ if (null != defaultAutoWire) System.out.println("My favorite autowire type is " + this.defaultAutoWire.showName()); } }
1.4.DefaultAutoWire.java
package pers.hanchao.autowire; public class DefaultAutoWire { public String showName() { return " defautl autowire"; } }
1.5.result
My favorite autowire type is defautl autowire
2.以xml形式,autowire=byType进行装配
2.1.App.java
package pers.hanchao.autowire; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * <p>spring构造注入示例:通过配置xml中的constructor-arg标签</p> * @author hanchao 2018/1/7 12:32 **/ public class App { public static void main(String[] args) { //byType的自动装配类型,通过setter注入的形式,在xml中指定autowire=byType,实现自动装配 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config/spring-autowire/spring-autowire-bytype.xml"); MyFavoriteAutowireType myFavoriteAutowireType = (MyFavoriteAutowireType) context.getBean("myFavoriteAutowireType"); myFavoriteAutowireType.showMyFavoriteAutowireType(); } }
2.2.spring-autowire-bytype.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--byType:按类型自动装配--> <bean id="myFavoriteAutowireType" class="pers.hanchao.autowire.MyFavoriteAutowireType" autowire="byType"/> <bean id="byTypeAutoWire" class="pers.hanchao.autowire.ByTypeAutoWire"/> </beans>
2.3.MyFavoriteAutowireType.java
package pers.hanchao.autowire; public class MyFavoriteAutowireType { public MyFavoriteAutowireType() { } private ByTypeAutoWire byTypeAutoWire; //通过setter注入 public void setByTypeAutoWire(ByTypeAutoWire byTypeAutoWire) { this.byTypeAutoWire = byTypeAutoWire; } public void showMyFavoriteAutowireType(){ if (null != byTypeAutoWire) System.out.println("My favorite autowire type is " + this.byTypeAutoWire.showName()); } }
2.4.ByTypeAutoWire.java
package pers.hanchao.autowire; public class ByTypeAutoWire { public String showName() { return " byType autowire"; } }
2.5.result
My favorite autowire type is byType autowire
3.以xml形式,autowire=byName进行装配
3.1.App.java
package pers.hanchao.autowire; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * <p>spring构造注入示例:通过配置xml中的constructor-arg标签</p> * @author hanchao 2018/1/7 12:32 **/ public class App { public static void main(String[] args) { //byName的自动装配类型,通过setter注入的形式,在xml中指定autowire=byName,实现自动装配 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config/spring-autowire/spring-autowire-byname.xml"); MyFavoriteAutowireType myFavoriteAutowireType = (MyFavoriteAutowireType) context.getBean("myFavoriteAutowireType"); myFavoriteAutowireType.showMyFavoriteAutowireType(); } }
3.2.spring-autowire-byname.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--byName:按名称自动装配--> <bean id="myFavoriteAutowireType" class="pers.hanchao.autowire.MyFavoriteAutowireType" autowire="byName"/> <bean id="byNameAutoWire" class="pers.hanchao.autowire.ByNameAutoWire"/> </beans>
3.3.MyFavoriteAutowireType.java
package pers.hanchao.autowire; public class MyFavoriteAutowireType { public MyFavoriteAutowireType() { } private ByNameAutoWire byNameAutoWire; //通过setter注入 public void setByNameAutoWire(ByNameAutoWire byNameAutoWire) { this.byNameAutoWire = byNameAutoWire; } public void showMyFavoriteAutowireType(){ if (null != byNameAutoWire) System.out.println("My favorite autowire type is " + this.byNameAutoWire.showName()); } }
3.4.ByNameAutoWire.java
package pers.hanchao.autowire; public class ByNameAutoWire { public String showName() { return " byName autowire"; } }
3.5.result
My favorite autowire type is byName autowire
4.以xml形式,autowire=constructor进行装配
4.1.App.java
package pers.hanchao.autowire; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * <p>spring构造注入示例:通过配置xml中的constructor-arg标签</p> * @author hanchao 2018/1/7 12:32 **/ public class App { public static void main(String[] args) { //byConstructor的自动装配类型,通过setter注入的形式,在xml中指定autowire=constructor,实现自动装配 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config/spring-autowire/spring-autowire-constructor.xml"); MyFavoriteAutowireType myFavoriteAutowireType = (MyFavoriteAutowireType) context.getBean("myFavoriteAutowireType"); myFavoriteAutowireType.showMyFavoriteAutowireType(); } }
4.2.spring-autowire-constructor.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--constructor:按构造器参数的数据类型自动装配--> <bean id="myFavoriteAutowireType" class="pers.hanchao.autowire.MyFavoriteAutowireType" autowire="constructor"/> <bean id="constructorAutoWire" class="pers.hanchao.autowire.ConstructorAutoWire"/> </beans>
4.3.MyFavoriteAutowireType.java
package pers.hanchao.autowire; public class MyFavoriteAutowireType { public MyFavoriteAutowireType() { } private ConstructorAutoWire constructorAutoWire; //通过constructor注入 public MyFavoriteAutowireType(ConstructorAutoWire constructorAutoWire) { this.constructorAutoWire = constructorAutoWire; } public void showMyFavoriteAutowireType(){ if (null != constructorAutoWire) System.out.println("My favorite autowire type is " + this.constructorAutoWire.showName()); } }
4.4.ConstructorAutoWire.java
package pers.hanchao.autowire; public class ConstructorAutoWire { public String showName() { return " constructor autowire"; } }
4.5.result
My favorite autowire type is constructor autowire
5.以xml形式,autowire=autodetect进行装配
5.1.App.java
package pers.hanchao.autowire; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * <p>spring构造注入示例:通过配置xml中的constructor-arg标签</p> * @author hanchao 2018/1/7 12:32 **/ public class App { public static void main(String[] args) { //byAutodetect的自动装配类型,先byContstructor,再byType的组合自动装配方式 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config/spring-autowire/spring-autowire-autodetect.xml"); MyFavoriteAutowireType myFavoriteAutowireType = (MyFavoriteAutowireType) context.getBean("myFavoriteAutowireType"); myFavoriteAutowireType.showMyFavoriteAutowireType(); } }
5.2.spring-autowire-autodetect.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--自动检测的自动装配形式--> <bean id="myFavoriteAutowireType" class="pers.hanchao.autowire.MyFavoriteAutowireType" autowire="constructor"/> <bean id="autodetectAutoWire" class="pers.hanchao.autowire.AutodetectAutoWire"/> </beans>
5.3.MyFavoriteAutowireType.java
package pers.hanchao.autowire; public class MyFavoriteAutowireType { public MyFavoriteAutowireType() { } private AutodetectAutoWire autodetectAutoWire; //通过constructor注入 public MyFavoriteAutowireType(AutodetectAutoWire autodetectAutoWire) { this.autodetectAutoWire = autodetectAutoWire; } //通过setter注入 public void setAutodetectAutoWire(AutodetectAutoWire autodetectAutoWire) { this.autodetectAutoWire = autodetectAutoWire; } public void showMyFavoriteAutowireType(){ if (null != autodetectAutoWire) System.out.println("My favorite autowire type is " + this.autodetectAutoWire.showName()); } }
5.4.AutoDetectAutoWire.java
package pers.hanchao.autowire; public class AutodetectAutoWire { public String showName() { return " autodetect autowire"; } }
5.5.result
My favorite autowire type is autodetect autowire
6.以@Autowire形式进行装配
6.1.App.java
package pers.hanchao.autowire; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * <p>spring构造注入示例:通过配置xml中的constructor-arg标签</p> * @author hanchao 2018/1/7 12:32 **/ public class App { public static void main(String[] args) { //byAnnotation的自动装配类型,及@Autowire注解的方式 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config/spring-autowire/spring-autowire-annotation.xml"); MyFavoriteAutowireTypeByAnnotation myFavoriteAutowireTypeByAnnotation = (MyFavoriteAutowireTypeByAnnotation) context.getBean("myFavoriteAutowireTypeByAnnotation"); myFavoriteAutowireTypeByAnnotation.showMyFavoriteAutowireType(); } }
6.2.spring-autowire-annotation.xml
<?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"> <context:annotation-config/> <bean id="myFavoriteAutowireTypeByAnnotation" class="pers.hanchao.autowire.MyFavoriteAutowireTypeByAnnotation"/> <bean id="defaultAutoWire" class="pers.hanchao.autowire.DefaultAutoWire"/> <bean id="byTypeAutoWire" class="pers.hanchao.autowire.ByTypeAutoWire"/> <bean id="byNameAutoWire" class="pers.hanchao.autowire.ByNameAutoWire"/> <bean id="constructorAutoWire" class="pers.hanchao.autowire.ConstructorAutoWire"/> <bean id="autodetectAutoWire" class="pers.hanchao.autowire.AutodetectAutoWire"/> </beans>
6.3.MyFavoriteAutowireTypeByAnnotation.java
package pers.hanchao.autowire; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; public class MyFavoriteAutowireTypeByAnnotation { private DefaultAutoWire defaultAutoWire; //通过@Autowired注解setter,默认按byType自动装配 @Autowired public void setDefaultAutoWire(DefaultAutoWire defaultAutoWire) { this.defaultAutoWire = defaultAutoWire; } //通过@Autowired注解字段,默认按byType自动装配 @Autowired private ByTypeAutoWire byTypeAutoWire; //通过@Autowired注解字段,通过@Qualifier指定按byName自动装配 @Autowired @Qualifier("byNameAutoWire") private ByNameAutoWire byNameAutoWire; private ConstructorAutoWire constructorAutoWire; //通过@Autowired注解constructor,默认按byType自动装配 @Autowired public MyFavoriteAutowireTypeByAnnotation(ConstructorAutoWire constructorAutoWire) { this.constructorAutoWire = constructorAutoWire; } public void showMyFavoriteAutowireType(){ if (null != defaultAutoWire) System.out.println("My favorite autowire type is @Autowire setter方法"); if (null != byTypeAutoWire) System.out.println("My favorite autowire type is @Autowire 字段(按类型)"); if (null != byNameAutoWire) System.out.println("My favorite autowire type is @Autowire 字段(按名称)"); if (null != constructorAutoWire) System.out.println("My favorite autowire type is @Autowire 构造方法"); } }
6.4.result
My favorite autowire type is @Autowire setter方法 My favorite autowire type is @Autowire 字段(按类型) My favorite autowire type is @Autowire 字段(按名称) My favorite autowire type is @Autowire 构造方法
6.5.关闭依赖检查(required)
默认情况下,spring加载时,会根据@Autowire注解检查所有的相关依赖。如果被@Autowire注解的依赖找不到,程序就会报错。如果想关闭依赖检查,可以通过以下注解。@Autowired(required=false)
相关文章推荐
- Spring 自学系列之IOC-8【自动装配autowire】
- Spring代码实例系列-06:通过注解@Component、@Controller、@Service和@Repository定义bean,@Autowire装配bean
- Spring整理9 -- 自动装配(autowire)
- Spring代码实例系列-07:Spring AOP面向切面,模拟实现事物控制
- Spring Autowire自动装配
- Spring Autowire自动装配
- Spring代码实例系列-08:Spring JDBC + DataSource +JdbcTemplate+JdbcDaoSupport的基本实例
- Spring代码实例系列-10:通过Spring Mail发送简单邮件、附件和HTML邮件
- spring 的自动装配 autowire
- 深入理解Spring系列之七:web应用自动装配Spring配置
- Proguard混淆代码导致Spring自动装配失败
- Spring代码实例系列-02:松耦合loose coupling(通过xml文件以默认的方式进行setter注入)
- spring 自动装配 default-autowire="byName/byType"
- Spring Autowire自动装配
- Spring代码实例系列-09:通过Spring PropertyPlaceholderConfigurer将properties配置的属性注入到xml配置文件中
- MyBatis代码实例系列-09:初步整合Spring + Spring MVC框架之后,如何打印MyBatis的SQL语句
- spring 自动装配autowire=byName或byType
- Spring Autowire自动装配
- Spring Autowire自动装配
- Spring - bean的autowire属性(自动装配)