https://repo.spring.io/libs-release-local/org/springframework/spring/
http://commons.apache.org/
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
https://mvnrepository.com/artifact/com.fasterxml.jackson.core
用到哪些包,就在这些网址里找到下载即可,后续用在其他再补充。
创建一个JEE项目(IDEA创建项目,新手建议采用Maven模式,可以直接使用,Gradle有个小坑,需要配置),在webapp——>WEB-INF文件夹下,创建一个lib文件夹,找到上述jar包,导入。
注:这里补充IDEA和Eclipse导入jar的方法
IDEA:
将jar粘贴到lib,然后右键lib,选择一个Add as Library选项,完成。
Eclipse:
将jar粘贴到lib,就能用了。
Spring的特点就是分层,让代码更清晰,管理方便,这里有必要解释一些常用字符串:
常用包名:service是业务逻辑层,dao是数据访问层,controller是控制器层,config是web、spring等配置类的包、pojo是普通JavaBeans。
注:pojo包中的类,只含有一些成员变量和关于这些成员变量的setter和getter方法,不含任何业务逻辑处理。
package dao;
public interface TestDao {
public void sayHello();
}
package dao;
public class TestDaoImpl implements TestDao{
@Override
public void sayHello() {
System.out.println("Hello World");
}
}
创建配置文件applicationContext.xml
创建测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import dao.TestDao;
public class Test {
public static void main(String[] args) {
//初始化spring 容器
@SuppressWarnings("resource")
ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
TestDao tt=(TestDao)appCon.getBean("test");
tt.sayHello();
}
}
运行Test类,结果输出:
Hello World
原理:读取配置文件,会按照里面的每一个
上述Hello World的例子用了XML配置Bean的方法,但是当你项目中需要大量Bean时,你想要修改一个类名,除了修改该类名以外,你还要跑到XML文件中,ctrl+F找到对应的原类名进行修改。当然这只是一种情况,XML配置不利于以后项目的升级维护。
因此,现在更推荐用注解的方式,实现装配Bean。
声明Bean的注解:
@Component | 普通标识Bean,任何类,没有明确的功能分配 |
@Repository | 用于dao数据访问层标识为Bean,功能和@Component一样 |
@Service | 用于service业务逻辑层标识为Bean,功能和@Component一样 |
@Controller | 用于controller控制器层标识为Bean,功能和@Component一样 |
注入Bean的注解(比如,在类中声明一个成员Object ob,不用进行实例化,Spring容器会先找自身有没有ob,没有创建一个,有就取出来,赋予当前ob)
@Autowired | 功能为上方解释,如果使用某些实例对象,不在需要用get,set等方法,通过该注解,直接将实例对象,赋予当前成员变量。按照Bean类型进行装配 |
@Resource | 与@Autowired功能一样,区别在于,按照名称来装配注入。 |
@Qualifier | 当需要按名称来装配Bean配合@Autowired一起用,此注解用来指定名称。 |
package annotation.dao;
public interface TestDao {
public void save();
}
package annotation.dao;
import org.springframework.stereotype.Repository;
@Repository("testDaoImpl")
public class TestDaoImpl implements TestDao{
@Override
public void save() {
System.out.println("testDao save");
}
}
package annotation.service;
public interface TestService {
public void save();
}
package annotation.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import annotation.dao.TestDao;
@Service("testServiceImpl")
public class TestServiceImpl implements TestService{
@Resource(name="testDaoImpl")
private TestDao testDao;
@Override
public void save() {
// TODO Auto-generated method stub
testDao.save();
System.out.println("testService save");
}
}
package annotation.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import annotation.service.TestService;
@Controller
public class TestController {
@Autowired
private TestService testService;
public void save() {
testService.save();
System.out.println("testController save");
}
}
package annotation;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("annotation")
public class ConfigAnnotation {
}
测试类:
package annotation;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import annotation.controller.TestController;
public class TestAnnotation {
public static void main(String[] args) {
// TODO Auto-generated method stub
AnnotationConfigApplicationContext appCon = new AnnotationConfigApplicationContext(ConfigAnnotation.class);
TestController tc = appCon.getBean(TestController.class);
tc.save();
appCon.close();
}
}