SpringBean的装载方式

本篇内容主要讲解“Spring Bean的装载方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Bean的装载方式”吧!

成都网站建设哪家好,找创新互联公司!专注于网页设计、重庆网站建设公司、微信开发、小程序制作、集团成都定制网页设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:砂岩浮雕等众多领域,积累了大量丰富的经验,同时也获得了客户的一致认可!

Bean的装配方式

Bean的装配可以理解为依赖关系注入

基于XML的装配

a) 设值注入

i.要求:

Bean 类必须提供一个默认的无参构造方法。  Bean 类必须为需要注入的属性提供对应的setter方法。

b) 构造注入

package com.itheima.assemble; import java.util.List; public class User {  private String username;  private Integer password;  private List<String> List;  /*   * 1.使用构造注入   * 1.1提供所有带参数的有参构造方法   */  public User(String username,Integer password,List<String> List){    super();    this.username = username;    this.password = password;    this.List = List;  }  /*   * 2.使用设值注入   * 2.1提供默认空构造方法   * 2.2为所有属性提供setter方法   */  public User(){       }  public void setUsername(String username) {    this.username = username;  }  public void setPassword(Integer password) {    this.password = password;  }  public void setList(List<String> list) {    List = list;  }  @Override  /*   * (non-Javadoc)   * @see java.lang.Object#toString()   * 为了输出是看到结果,重写toString()方法   */  public String toString() {    return "User [username=" + username + ", password=" + password + ", List=" + List + "]";  }}

<?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"><!-- 1.使用构造注入方式装配User实例 --><bean id="user1" class="com.itheima.assemble.User"><constructor-arg index="0" value="tom"></constructor-arg><constructor-arg index="1" value="123456"></constructor-arg><constructor-arg index="2">  <list>  <value>"constructorvalue1"</value>  <value>"constructorvalue2"</value>  </list></constructor-arg></bean><!-- 2.使用设值注入装配User实例 --><bean id="user2" class="com.itheima.assemble.User">  <property name="username" value="张三"></property>  <property name="password" value="654321"></property>  <!-- 注入list集合 -->  <property name="list">    <list>      <value>"setlistvalue1"</value>      <value>"setlistvalue2"</value>    </list>  </property></bean></beans>

<constructor -arg >元素用于定义构造方法的参数,子元素<Iist>来为Use r 类中对应的list集合属性注入值。

其中<property>元素用于调用Bean实例中的setter方法完成属性赋值,从而完成依赖注入。

package com.itheima.assemble; import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class XmlBeanAssembleTest {  public static void main(String[] args) {    //定义配置文件路径    String xmlPath = "com/itheima/assemble/beans5.xml";    //加载配置文件    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);    //构造方式输出结果    System.out.println("构造方式:");    System.out.println(applicationContext.getBean("user1"));    //设值方式输出结果    System.out.println("设值方式:");    System.out.println(applicationContext.getBean("user2"));  }}

2.基于Annotation的装配

package com.itheima.annotation; public interface UserDao {  public void save();}

package com.itheima.annotation; import org.springframework.stereotype.Repository; @Repository("userDao")public class UserDaoImpl implements UserDao{  public void save(){    System.out.println("userdao...save...");  }}

先使用@Repository 注解将UserDaolmpl 类标识为Spring 中的Bean,其写法相当于配置文件中<bean id="userDao" class="com.itheima.annotation.UserDaolmpl"/>

package com.itheima.annotation; public interface UserService {  public void save();}

package com.itheima.annotation; import javax.annotation.Resource; import org.springframework.stereotype.Service; @Service("userService")public class UserServiceImpl implements UserService{  @Resource(name="userDao")  private UserDao userDao;  @Override  public void save() {    // TODO Auto-generated method stub    //调用userDao中的save()方法    this.userDao.save();    System.out.println("userservice...save...");  }  public void setUserDao(UserDao userDao) {    this.userDao = userDao;  }   }

@Service 注解将UserServicelmpl 类标识为Spring中的Bean,这相当于配置文件中<bean id="userService" class="com.itheima.annotation.UserServicelmpl”/> 的编写;然后使用@Resource 注解标注在属性userDao上,这相当于配置文件中<property name="userDao" ref="userDao“/>的写法。

package com.itheima.annotation; import javax.annotation.Resource; import org.springframework.stereotype.Controller; @Controller("userController")public class UserController {  @Resource(name="userService")  private UserService userService;  public void save(){    this.userService.save();    System.out.println("userControlle...save...");  }  public void setUserService(UserService userService) {    this.userService = userService;  }   }

Controller 注解标注了UserController 类,这相当于在配置文件中编写<bean id="userControll er" class="com .itheima.annotation.UserController"/>; 然后使用了@Resource 注解标注在userService 属性上,这相当于在配置文件中编写<propertyname="userService" ref="userService" />

<?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-4.3.xsd    http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 使用context命名空间,在配置文件中开启相应的注释处理器 --><context:component-scan base-package="com.itheima.annotation"></context:component-scan> </beans>

package com.itheima.annotation; import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class AnnotationAssembleTest {  public static void main(String[] args) {    String xmlPath = "com/itheima/annotation/beans6.xml";    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);    //获取UserController实例    UserController userController = (UserController)applicationContext.getBean("userController");    //调用UserController中的save()方法    userController.save();  }}

3.自动装配

<?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-4.3.xsd    http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 使用bean元素的autowire属性完成自动装配 --><bean id="userDao" class="com.itheima.annotation.UserDaoImpl"></bean><bean id="userService" class="com.itheima.annotation.UserServiceImpl" autowire="byName"></bean><bean id="userController" class="com.itheima.annotation.UserController" autowire="byName"></bean></beans>

增加了autowire 属性,并将其属性值设置为byName 。在默认情况下,配置文件中需要通过ref 来装配Bean ,但设置了autowire=" byName"后,Spring 会自动寻找userServiceBean 中的属性,并将其属性名称与配置文件中定义的Bean 做匹配。由于UserServicelmpl 中定义了userDao 属'性及其setter 方法,这与配置文件中id 为userDao 的Bean 相匹配,所以Spring会自动地将id 为userDao 的Bean 装配到id 为userService 的Bean 中。

到此,相信大家对“Spring Bean的装载方式”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

新闻名称:SpringBean的装载方式
URL链接:https://www.cdcxhl.com/article6/gdoeig.html

成都网站建设公司_创新互联,为您提供微信公众号网站营销网站制作企业建站全网营销推广建站公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站制作