1.spring简介
开源的,轻量级的为企业开发应用带来春天。解决了javaee开发项目时各层耦合性高的方案。
目的:简化开发,提高应用维性,解耦合
2. 重要的概念:
控制反转:IOC
应用不负责对象的创建,而把创建对象的控制权转交spring容器,该过程中控制权的转让称之为控制反转
依赖注入:DI
为了更加具体的描述控制反转,提出了依赖注入的概念
面向切面:
回顾面向对象:引用.成员
切入点、方法执行前,执行后等节点
//UserServiceImpl 耦合 userDaoImpl()
public class UserServiceImpl implements UserService{
private UserDao userDao=new userDaoImpl() ;
public boolean login(String userName, String password) {
return this.userDao.login(userName, password);
}
}
//解耦合:spring userDao由外部注入(运行期间)
public class UserServiceImpl implements UserService{
private UserDao userDao ;
public boolean login(String userName, String password) {
return this.userDao.login(userName, password);
}
}
3.第一个spring程序
1)引入jar包
使用maven 在pom.xml中导包
spring-context
spring-beans
spring-test
spring-core
junit
在远程仓库中查找https://mvnrepository.com/ 不同版本的jar
2)创建在src/main/java下创建 配置文件appConfig.xml
构造器注入:
public class UserServiceImpl implements UserService{
private UserDao userDao;
public boolean login(String userName, String password) {
System.out.println("----------UserServiceImpl----------");
return this.userDao.login(userName, password);
}
//含参的构造方法
public UserServiceImpl(UserDao userDao) {
super();
this.userDao = userDao;
}
}
<!-- 依赖注入:实现类 -->
<bean name="uDao" class="com.neuedu.dao.UserDaoImpl"></bean>
<bean name="uService" class="com.neuedu.service.UserServiceImpl">
<constructor-arg name="userDao" ref="uDao"></constructor-arg>
</bean>
3)测试类
public class Test {
public static void main(String[] args) {
//加载配置文件
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("appConfig.xml");
//在配置文件中查找bean
UserService us=(UserService)ctx.getBean("uService");
us.login("张三", "1234");
//查找DAO bean
UserDao dao=(UserDao)ctx.getBean("uDao");
dao.login("aaa", "123");
}
}
问题:
Could not resolve matching constructor service中没有构造器
4.使用配置类方式注入:
//注册成配置类
@Configuration
public class AppConfig {
@Bean(name="uDao")
public UserDao getUserDao(){
return new UserDaoImpl();
}
@Bean("uService")
public UserService getUserService(UserDao dao){
return new UserServiceImpl(dao);
}
}
//测试类
public class Test {
public static void main(String[] args) {
ApplicationContext app= new AnnotationConfigApplicationContext(AppConfig.class);//注意不要写成字符串
System.out.println(app);
UserDao dao=(UserDao)app.getBean("uDao");
dao.login("ccc", "132232");
UserService us= (UserService)app.getBean("uService");
us.login("ddd", "");
}
}
5.junit使用
版本:在spring5.0+中需要用junit4.12
1)创建
右键 other--junit-->junit case
在类中可以创建多个测试用例,每一个测试用例的方法上使用@Test注解
public class testJunit {
//测试用例
@Test
public void tt(){
System.out.println("Dfdfdfdfd");
}
@Test
public void dd(){
System.out.println("cvvcvcvcvv");
}
}
2)运行
左侧项目管理器中,右键某个方法 runas--junit 即可测试
3)测试spring配置类中的bean
右键 other--junit-->junit suite
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=AppConfig.class)//加载配置文件
//@ContextConfiguration(locations={"AppConfig.xml"}) 加载配置文件
public class AllTests {//该类可测试AppConfig类中注入的bean的方法
@Autowired
private UserService uService;
@Test
public void tt(){
uService.login("ss", "");
}
}