Spring的入門案例(簡單)
該案例主要用來概述使用Spring IOC方式創建對象並調用方法,希望對大家有所幫助
Spring的概述
- 什麼是Spring :Spring是分層的JavaSE/EE應用 full-stack 輕量級開源框架
Spring的兩大核心:
IOC(Inverse Of Control 反轉控制)
AOP(Aspect Oriented Programming 面向切面編程) - 我們爲什麼要使用Spring:Spring是一站式框架,稱之爲一站式框架的原因是Spring可以整合其他框架
- 什麼是IOC :IOC的核心如下:
1.工廠負責對象生命力週期的管理:(Spring管理與銷燬)
2.對象的依賴由工廠完成注入(Spring維護對象間關係)
Spring提出了對象工廠的概念,由Spring工廠來管理對象的生命週期。所謂的生命週期指的是從對象的創建一直到對象的銷燬都由Spring來管理,我們無需再自己new對象,而是從Spring工廠中獲取需要的對象,甚至對象依賴都是工廠來注入,無需手動注入依賴
案例流程總結:
第一步:創建maven Java工程,在pox.xml配置文件中導入以下jar包的座標
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
</dependencies>
第二步:在Java包下創建以下包目錄
第三步:在comfig目錄下創建 SpringConfiguration類
在SpringConfigoration類上定義@ComponentScan註解告知Spring要掃描的包,Spring會>掃描並加載指定包下所有類中的註解。@Configuration註解告知Spring當前類是一個配置類;
第四步:在dao包下創建Dao接口,接口中創建一個無返回值的findAll方法
在dao包下創建impl包
在impl包下創建UserDaoImpl類實現UserDao接口,實現接口的方法,並在實現類上定義接口@Component註解給實現類起一個別名
第五步:在service包下創建一個UserService接口在接口中定義一個findAllUsers方法
在service包下創建impl包
在impl包下創建一個UserServiceImpl類實現UserService接口,在UserServiceImpl類中通過@Resource註解(指定依賴,就是通過類的別名創建對象)創建對象,並在對象的前面添加private(這裏我定義的是UserDaoImpl對象),在UserServiceImpl中定義一個方法findAllUsers在類中打印查詢開始,調用UserDaoImpl對象的方法,打印查詢結束
第六步:在測試類中使用@Test註解進行測試
在測試方法中通過配置類創建對象(ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);),調用對象的getBean(“類的別名”)方法,方法的返回值Object類型,需要對對象進行強轉(UserService userServiceImpl = (UserService) applicationContext.getBean(“userServiceImpl”);),最後調用對象的方法(userServiceImpl.findAllUsers();),進行測試(運行測試方法)
具體代碼
comfing包
package com.czxy.comfig;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @Author Jimmy
* @Date 2019/6/10 3:46 PM
* @Desc
*/
//告知Spring要掃描的包,Spring會掃描並加載指定包下所有類中的註解。
@ComponentScan(basePackages = {"com.czxy.dao","com.czxy.service"})
//註解告知Spring當前類是一個配置類;
@Configuration
public class SpringConfiguration {
}
dao包
package com.czxy.dao;
public interface UserDao {
public void findAll();
}
dao > impl包
package com.czxy.dao.impl;
import com.czxy.dao.UserDao;
import org.springframework.stereotype.Component;
/**
* @Author Jimmy
* @Date 2019/6/10 3:48 PM
* @Desc
*/
@Component("userDaoImpl")
public class UserDaoImpIA implements UserDao {
public void findAll() {
System.out.println("A方式 查詢所有");
}
}
service包
package com.czxy.service;
public interface UserService {
public void findAllUsers();
}
service > impl包
package com.czxy.service.impl;
import com.czxy.dao.UserDao;
import com.czxy.service.UserService;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @Author Jimmy
* @Date 2019/6/10 3:48 PM
* @Desc
*/
@Component("userServiceImpl")
public class UserServiceImplA implements UserService {
//指定依賴
@Resource(name = "userDaoImpl")
private UserDao userDao;
public void findAllUsers() {
System.out.println("查詢所有");
userDao.findAll();
System.out.println("查詢結束");
}
}
test包
package com.czxy.test;
import com.czxy.comfig.SpringConfiguration;
import com.czxy.service.impl.UserServiceImplA;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import javax.annotation.Resource;
/**
* @Author Jimmy
* @Date 2019/6/10 3:48 PM
* @Desc
*/
public class TestA {
@Test
public void test(){
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
UserService userServiceImpl = (UserService) context.getBean("userServiceImpl");
userServiceImpl.findAllUsers();
}
}
運行結果
整合JUnit4
只需要修改測試文件即可,前面在pom.xml文件中已經導入了spring-test jar的座標,代碼如下
package com.czxy.test;
import com.czxy.comfig.SpringConfiguration;
import com.czxy.service.impl.UserServiceImplA;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
/**
* @Author Jimmy
* @Date 2019/6/10 3:48 PM
* @Desc
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfiguration.class})
public class TestA {
@Resource(name = "userServiceImpl")
private UserServiceImplA serviceImplA;
@Test
public void test(){
serviceImplA.findAllUsers();
}
}