JavaEE进阶 Spring IOC深入学习
张颖 2018-04-08 来源 : 阅读 305 评论 0

摘要:本篇JavaEE进阶教程将为大家讲解JavaEE进阶编程中Spring IOC的知识点,看完这篇文章会让你对JavaEE进阶编程的知识点有更加清晰的理解和运用。

JavaEE进阶 Spring IOC深入学习


本篇JavaEE进阶教程将为大家讲解JavaEE进阶编程中Spring IOC的知识点,看完这篇文章会让你对JavaEE进阶编程的知识点有更加清晰的理解和运用。



  1. beans.xml:


1.      <?xml version="1.0" encoding="UTF-8"?>  
2.      <beans xmlns="http://www.springframework.org/schema/beans"  
3.             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4.             xsi:schemaLocation="http://www.springframework.org/schema/beans  
5.                 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
6.        
7.        <bean id="u" class="com.yuwl.dao.impl.UserDAOImpl">  
8.        </bean>  
9.            
10.    <bean id="userService" class="com.yuwl.service.UserService">  
11.      <property name="userDAO" ref="u" />  
12.    </bean>  
13.    
14.  </beans>

2.测试:

1.      import org.junit.Test;  
2.      import org.springframework.context.ApplicationContext;  
3.      import org.springframework.context.support.ClassPathXmlApplicationContext;  
4.      import com.yuwl.model.User;  
5.        
6.      //Dependency Injection  
7.      //Inverse of Control  
8.      public class UserServiceTest {  
9.        
10.      @Test  
11.      public void testAdd() throws Exception {  
12.          ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");  
13.          UserService service = (UserService)ctx.getBean("userService");  
14.            
15.          User u = new User();  
16.          u.setUsername("yuwl");  
17.          u.setPassword("123456");  
18.          service.add(u);  
19.      }  
20.    
21.  }

结果,执行成功:user saved!

说明:这里为什么使用ApplicationContext,而不用BeanFactory,根据官方文档,BeanFactory是基类,子类ApplicationContext比它做了更好的扩展,功能更强大,因此官方推荐使用ApplicationContext。

3.理解IOC

理解DI:

直接理解IOC,不太好说,先来说DI—Dependency Injection,依赖注入。

看配置文件beans.xml,userService依赖Spring容器注入userDAO,从而得到userDAO实例。

再看另一方面,userService也是通过Spring容器注入com.bjsxt.service.UserService,我们才能不用new而获得其实例,userDAO也是一样。

理解IOC:

依赖注入搞明白了,再来看IOC—Inverse of Control,控制反转,以前写程序都是我们自己new的service,自己new的dao,但是现在交给Spring容器来完成了,配下配置文件,简单又灵活就搞定了,是不是把这控制权交给了Spring,这就是控制反转。把控制权由我们人为控制交给Spring来控制。

4.注入类型

Spring提供的注入类型有三种:

a.setter(最常用)

b.构造方法(不常用)

c.接口或属性(基本不用)

我们一般用的最多的就是setter,其它两种可以不用掌握。

5.<bean中的scope属性

a.singleton单例

b.proptotype 每次创建新的对象

不写默认为singleton单例,一般配置Action的bean时,设置为proptotype。

6.自动装配

a.byName—根据bean name来自动选择

b.byType—根据bean class来自动选择

c.如果所有的bean都用同一种,可以使用beans的属性:default-autowire

byName:

1.      <?xml version="1.0" encoding="UTF-8"?>  
2.      <beans xmlns="http://www.springframework.org/schema/beans"  
3.             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4.             xsi:schemaLocation="http://www.springframework.org/schema/beans  
5.                 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"  
6.                >  
7.        <!-- byName -->  
8.        <bean name="userDAO" class="com.yuwl.dao.impl.UserDAOImpl">  
9.          <property name="daoId" value="1"></property>  
10.    </bean>  
11.      
12.    <bean name="userDAO2" class="com.yuwl.dao.impl.UserDAOImpl">  
13.      <property name="daoId" value="2"></property>  
14.    </bean>  
15.        
16.    <bean id="userService" class="com.yuwl.service.UserService" autowire="byName">  
17.    </bean>  
18.    
19.  </beans>

byType:

1.      <?xml version="1.0" encoding="UTF-8"?>  
2.      <beans xmlns="http://www.springframework.org/schema/beans"  
3.             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4.             xsi:schemaLocation="http://www.springframework.org/schema/beans  
5.                 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"  
6.                >  
7.        <!-- byType -->  
8.        <bean name="userDAO" class="com.yuwl.dao.impl.UserDAOImpl">  
9.          <property name="daoId" value="1"></property>  
10.    </bean>  
11.    <!--    
12.    <bean name="userDAO2" class="com.yuwl.dao.impl.UserDAOImpl">  
13.      <property name="daoId" value="2"></property>  
14.    </bean>  
15.    -->  
16.    <bean id="userService" class="com.yuwl.service.UserService" autowire="byType">  
17.    </bean>  
18.    
19.  </beans>

7.Annotation第一步

修改xml文件,加入<context:annotation-config/>

1.      <?xml version="1.0" encoding="UTF-8"?>  
2.      <beans xmlns="http://www.springframework.org/schema/beans"  
3.             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4.             xmlns:context="http://www.springframework.org/schema/context"  
5.             xsi:schemaLocation="http://www.springframework.org/schema/beans  
6.                 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
7.                 http://www.springframework.org/schema/context  
8.                 http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
9.            
10.      <context:annotation-config />  
11.        
12.      <bean id="u" class="com.yuwl.dao.impl.UserDAOImpl">  
13.      </bean>  
14.        
15.      <bean id="u2" class="com.yuwl.dao.impl.UserDAOImpl">  
16.      </bean>  
17.        
18.      <bean id="userService" class="com.yuwl.service.UserService" >  
19.      </bean>  
20.    
21.  </beans>

8.@Autowired

a.默认按类型byType

b.如果想用byName,使用@Qulifier

1.      import org.springframework.beans.factory.annotation.Autowired;  
2.      import org.springframework.beans.factory.annotation.Qualifier;  
3.      import com.yuwl.dao.UserDAO;  
4.      import com.yuwl.model.User;  
5.        
6.      public class UserService {  
7.            
8.          private UserDAO userDAO;    
9.            
10.      public void init() {  
11.          System.out.println("init");  
12.      }  
13.        
14.      public void add(User user) {  
15.          userDAO.save(user);  
16.      }  
17.      public UserDAO getUserDAO() {  
18.          return userDAO;  
19.      }  
20.        
21.      @Autowired  
22.      public void setUserDAO(@Qualifier("u") UserDAO userDAO) {  
23.          this.userDAO = userDAO;  
24.      }  
25.        
26.      public void destroy() {  
27.          System.out.println("destroy");  
28.      }  
29.  }

9.@Resource(重要)

a.加入:j2ee/common-annotations.jar

b.默认按名称byName,名称找不到,按类型byType

c.可以指定特定名称

d.推荐使用

1.      import javax.annotation.Resource;  
2.      import com.yuwl.dao.UserDAO;  
3.      import com.yuwl.model.User;  
4.        
5.      public class UserService {  
6.            
7.          private UserDAO userDAO;    
8.            
9.          public void init() {  
10.          System.out.println("init");  
11.      }  
12.        
13.      public void add(User user) {  
14.          userDAO.save(user);  
15.      }  
16.      public UserDAO getUserDAO() {  
17.          return userDAO;  
18.      }  
19.        
20.      @Resource  
21.      public void setUserDAO( UserDAO userDAO) {  
22.          this.userDAO = userDAO;  
23.      }  
24.        
25.      public void destroy() {  
26.          System.out.println("destroy");  
27.      }  
28.  }

10.@Component @Service @Controller @Repository

a.初始化的名字默认为类名首字母小写

b.可以指定初始化bean的名字

beans.xml:

1.      <?xml version="1.0" encoding="UTF-8"?>  
2.      <beans xmlns="http://www.springframework.org/schema/beans"  
3.             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4.             xmlns:context="http://www.springframework.org/schema/context"  
5.             xsi:schemaLocation="http://www.springframework.org/schema/beans  
6.                 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
7.                 http://www.springframework.org/schema/context  
8.                 http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
9.          <context:annotation-config />  
10.      <context:component-scan base-package="com.yuwl"/>  
11.     
12.  </beans>

Spring容器按包结构base-package="com.yuwl"来搜索要初始化的bean

UserDAOImpl:

1.      import org.springframework.stereotype.Component;  
2.      import com.yuwl.dao.UserDAO;  
3.      import com.yuwl.model.User;  
4.        
5.      @Component("u")   
6.      public class UserDAOImpl implements UserDAO {  
7.        
8.          public void save(User user) {  
9.              //Hibernate or Jdbc add  
10.          System.out.println("user saved!");  
11.      }  
12.    
13.  }

UserService:

1.      import javax.annotation.Resource;  
2.      import org.springframework.stereotype.Component;  
3.      import com.yuwl.dao.UserDAO;  
4.      import com.yuwl.model.User;  
5.        
6.      @Component("userService")  
7.      public class UserService {  
8.            
9.          private UserDAO userDAO;    
10.        
11.      public void init() {  
12.          System.out.println("init");  
13.      }  
14.        
15.      public void add(User user) {  
16.          userDAO.save(user);  
17.      }  
18.      public UserDAO getUserDAO() {  
19.          return userDAO;  
20.      }  
21.        
22.      @Resource(name="u")  
23.      public void setUserDAO( UserDAO userDAO) {  
24.          this.userDAO = userDAO;  
25.      }  
26.        
27.      public void destroy() {  
28.          System.out.println("destroy");  
29.      }  
30.  }


Spring IOC最主要的核心内容就学到这,以上内容由职坐标整理并发布,欢迎大家前来职坐标学习!

 

 

 


本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
本文作者 联系TA

熟悉企业级项目以及企业用人需求

  • 13
    文章
  • 952
    人气
  • 0%
    受欢迎度

已有0人表明态度,0%喜欢该老师!

进入TA的空间
名师指导 直通车
  • 索取资料 索取资料 索取资料
  • 答疑解惑 答疑解惑 答疑解惑
  • 技术交流 技术交流 技术交流
  • 职业测评 职业测评 职业测评
  • 面试技巧 面试技巧 面试技巧
  • 高薪秘笈 高薪秘笈 高薪秘笈
TA的其他文章 更多>>
JavaEE基础 Spring体系
经验技巧 0% 的用户喜欢
JavaEE基础 Spring常用注解
经验技巧 0% 的用户喜欢
SpringBoot 如何优雅的使用mybatis
经验技巧 0% 的用户喜欢
JavaEE进阶 Springboot集成Mybatis
经验技巧 0% 的用户喜欢
JavaEE错误 SpringBoot出现bean无法被spring扫描到的问题
经验技巧 0% 的用户喜欢
其他海同名师 更多>>
刘新华
刘新华 联系TA
实力型。激情饱满,对专业充满热情
吴翠红
吴翠红 联系TA
独创“教、学、练、测”循环教学模式
吕益平
吕益平 联系TA
熟悉企业软件开发的产品设计及开发
黄泽民
黄泽民 联系TA
擅长javase核心技术
程钢
程钢 联系TA
擅长大型企业商业网站开发和管理
经验技巧30天热搜词 更多>>

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:13167058313
小职老师的微信号:13167058313

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    ICP许可  沪B2-20190160

站长统计