Spring Bean的装载方式
创始人
2024-12-25 00:02:40
0次

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 List;  /*   * 1.使用构造注入   * 1.1提供所有带参数的有参构造方法   */  public User(String username,Integer password,List 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 list) {    List = list;  }  @Override  /*   * (non-Javadoc)   * @see java.lang.Object#toString()   * 为了输出是看到结果,重写toString()方法   */  public String toString() {    return "User [username=" + username + ", password=" + password + ", List=" + List + "]";  }}

   "constructorvalue1"  "constructorvalue2"                    "setlistvalue1"      "setlistvalue2"      

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

其中元素用于调用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,其写法相当于配置文件中

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,这相当于配置文件中

Controller 注解标注了UserController 类,这相当于在配置文件中编写; 然后使用了@Resource 注解标注在userService 属性上,这相当于在配置文件中编写

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.自动装配

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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...