Sprint注入和bean的自动装配以及Autowired的用法
2017-03-15 14:47
597 查看
1、Spring注入
Spring注入常用的有两种方式,第一种是设值注入,第二种是构造注入。1、设值注入
配置文件<?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="book" class="com.wry.bean.Book"></bean> <bean id="reader" class="com.wry.bean.Reader"> <property name="book" ref="book" /> </bean> </beans>
Book.java
package com.wry.bean; public class Book { public void read(){ System.out.println("readding book"); } }Reader.java
package com.wry.bean; public class Reader { private Book book; public void setBook(Book book) { this.book = book; } public void readBook(){ book.read(); } }
测试
public class Demo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); Reader reader = (Reader)context.getBean("reader"); reader.readBook(); } }
2、构造器注入
配置文件<?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="book" class="com.wry.bean.Book"></bean> <bean id="reader" class="com.wry.bean.Reader"> <constructor-arg name="book" ref="book" /> </bean> </beans>
Book.java
package com.wry.bean; public class Book { public void read(){ System.out.println("readding book"); } }Reader.java
package com.wry.bean; public class Reader { private Book book; public Reader(Book book){ this.book = book; } public void readBook(){ book.read(); } }
测试
public class Demo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); Reader reader = (Reader)context.getBean("reader"); reader.readBook(); } }
2、bean的自动装配
bean的自动装配有三种方式,第一种通过byName,第二种通过byType,第三种通过constructor。1、通过byName
在Spring的配置文件头部加入default-autowire = “byName”,在xml中定义的bean不要property参数(或者constructor-arg)。配置文件
<?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" default-autowire = "byName"> <bean id="book" class="com.wry.bean.Book"></bean> <bean id="reader" class="com.wry.bean.Reader"></bean> </beans>Book.java
package com.wry.bean; public class Book { public void read(){ System.out.println("readding book"); } }Reader.java
package com.wry.bean; public class Reader { private Book book; public void setBook(Book book) { this.book = book; } public void readBook(){ book.read(); } }测试
public class Demo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); Reader reader = (Reader)context.getBean("reader"); reader.readBook(); } }
2、通过byType
在Spring的配置文件头部加入default-autowire = “byType”,因为是通过类型注入的,所以bean中的id可以改名称,当然也可以bean的id删除。配置文件
<?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" default-autowire = "byType"> <bean class="com.wry.bean.Book"></bean> <bean id="reader" class="com.wry.bean.Reader"></bean> </beans>Book.java
package com.wry.bean; public class Book { public void read(){ System.out.println("readding book"); } }Reader.java
package com.wry.bean; public class Reader { private Book book; public void setBook(Book book) { this.book = book; } public void readBook(){ book.read(); } }测试
public class Demo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); Reader reader = (Reader)context.getBean("reader"); reader.readBook(); } }
3、通过constructor
在Spring的配置文件头部加入default-autowire = “constructor”,因为是通过构造器注入的,所以bean中的id可以改名称,当然也可以bean的id删除。配置文件
<?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" default-autowire = "constructor"> <bean class="com.wry.bean.Book"></bean> <bean id="reader" class="com.wry.bean.Reader"></bean> </beans>Book.java
package com.wry.bean; public class Book { public void read(){ System.out.println("readding book"); } }Reader.java
package com.wry.bean; public class Reader { private Book book; public Reader(Book book){ this.book = book; } public void readBook(){ book.read(); } }测试
public class Demo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); Reader reader = (Reader)context.getBean("reader"); reader.readBook(); } }
3、Autowired的用法
配置文件统一配置如下:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.wry.bean"></context:component-scan> </beans>Book.java代码统一如下:
package com.wry.bean; import org.springframework.stereotype.Component; @Component public class Book { public void read(){ System.out.println("readding book"); } }测试代码统一如下:
public class Demo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); Reader reader = (Reader)context.getBean("reader"); reader.readBook(); } }
1、成员变量方式
Reader.java package com.wry.bean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Reader { @Autowired private Book book; public void readBook(){ book.read(); } }
2、set方法方式
package com.wry.bean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Reader { private Book book; @Autowired public void setBook(Book book) { this.book = book; } public void readBook(){ book.read(); } }
3、构造器方式
package com.wry.bean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Reader { private Book book; @Autowired public Reader(Book book){ this.book = book; } public void readBook(){ book.read(); } }Autowired的使用说明
1、默认情况下,如果因找不到合适的bean将会导致autowiring失败抛出异常,可以通过下面的方式避免:
@Component public class Reader { @Autowired(required = false) private Book book; public void readBook(){ book.read(); } }2、每个类只能有一个构造器被标记为required = true
3、可以注解那些众所周知的解析依赖性接口,比如:BeanFactory、ApplicationContext、Environment、ResourceLoader、ApplicationEventPublisher、MessageSource等。
相关文章推荐
- spring的Autowired,Qualifier注解介绍以及自动装配
- Interceptor无法用Autowired自动注入Bean
- spring的Autowired,Qualifier注解介绍以及自动装配
- 使用@Autowired自动装配bean
- Action中如何通过@Autowired自动注入spring bean ?
- spring 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入
- Spring Bean装配--@Qualifier结合@Autowired注解注入说明
- Spring入门学习——用@Autowired和@Resource自动装配Bean
- spring ioc容器注入的集中方式,以及属性注入的集中依赖,继承,使用SPEL表达式,ioc容器的生命周期,bean的几种工厂方法配置方式,bean的自动装配
- servlet中使用@Autowired自动装配bean
- Spring 注解Autowired自动注入bean异常解决
- Spring4学习笔记(八):通过注解的方式配置bean和@Autowired 自动装配
- SpringMVC注解@Autowired和@Qualifier 自动注入[根据类型注入] @Autowired 可以对成员变量、方法以及构造函数进行注释, @Qualifier 的
- Spring@Autowired注解与自动装配
- Spring@Autowired注解与自动装配
- Spring@Autowired注解与自动装配
- Spring@Autowired注解与自动装配
- spring @Autowired 注解自动装配默认装配方式
- Spring@Autowired注解与自动装配
- Spring@Autowired注解与自动装配