ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Bean的装配方式

2022-03-08 22:32:49  阅读:161  来源: 互联网

标签:装配 password name 方式 void Bean save public


Bean的装配方式

1.基于XML的装配(设值注入和构造注入)

设值注入要求一个Bean满足以下两点要求:

  • Bean类必须提供一个默认的无参构造方法

  • Bean类必须为需要注入的属性提供对应的setter方法

public class User {

   private String name;
   private Integer password;
   private List<String> list;

   public User() {
  }

   public User(String name, Integer password, List<String> list) {
       this.name = name;
       this.password = password;
       this.list = list;
  }

   @Override
   public String toString() {
       return "User{" +
               "name='" + name + '\'' +
               ", password=" + password +
               ", list=" + list +
               '}';
  }

   public void setName(String name) {
       this.name = name;
  }

   public void setPassword(Integer password) {
       this.password = password;
  }

   public void setList(List<String> list) {
       this.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 index="1" value="123456"/>
       <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="name" value="张三"></property>
       <property name="password" value="123456"></property>
       <property name="list">
           <list>
               <value>"setlistvalue1"</value>
               <value>"setlistvalue2"</value>
           </list>
       </property>
   </bean>
</beans>
public class XmlBeanAssembleTest {
   public static void main(String[] args) {
       String xmlPath = "com/itheima/assemble/beans5.xml";
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
       System.out.println(applicationContext.getBean("user1"));
       System.out.println(applicationContext.getBean("user2"));
  }
}

2.基于Annotation的装配(推荐)

一些常用的注解:

@Repository:用于将数据访问层(Dao层)的类标识为Spring中的Bean

@Service:用于将业务层(Service层)的类标识为Spring中的Bean

@Controller:用于将控制层(如Spring MVC中的Controller层)的类标识为Spring中的Bean

@Autowired:用于对Bean的属性变量、属性的setter方法及构造方法进行标注,配合对应的注解处理器完成Bean的自动装配工作,默认按照Bean的类型进行装配

@Resource:作用和@Autowired一样,但默认按照Bean实例名称装配

public interface UserDao {
   public void save();
}
@Repository("userDao")
public class UserDaoImpl implements UserDao {

   @Override
   public void save() {
       System.out.println("userDao...save()....");
  }
}
public interface UserService {
   public void save();
}
@Service("userService")
public class UserServiceImpl implements UserService{

   //@Resource(name = "userDao")
   @Autowired
   private UserDao userDao;

   public void setUserDao(UserDao userDao) {
       this.userDao = userDao;
  }

   @Override
   public void save() {
       this.userDao.save();
       System.out.println("userService ... save()...");
  }
}
@Controller("userController")
public class UserController {

   //@Resource(name = "userService")
   @Autowired
   private UserService userService;

   public void setUserService(UserService userService) {
       this.userService = userService;
  }

   public void save(){
       this.userService.save();
       System.out.println("userController... save()...");
  }
}
<?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命名空间,在配置文件中开启相应的注解处理器-->
   <context:annotation-config/>
   <!--   可以使用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>

<!--   方式二,推荐 -->
   <!-- 使用context命名空间,通知Spring扫描指定包下所有Bean类,进行注解解析 -->
<!--   <context:component-scan base-package="com.itheima.annotation"/>-->
</beans>
public class AnnotationAssembleTest {
   public static void main(String[] args) {
       String xmlPath = "com/itheima/annotation/beans6.xml";
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
       UserController userController = (UserController) applicationContext.getBean("userController");
       userController.save();
  }
}

3.自动装配

Spring的<bean>元素中包含一个autowire属性,可以通过该属性的属性值进行自动装配Bean,常用的属性值有byName、byType,使用时要提供类属性的setter方法。

标签:装配,password,name,方式,void,Bean,save,public
来源: https://www.cnblogs.com/czhai/p/15982837.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有