1maven
1、当前的项目中会依赖大量的jar包,而jar包之间的依赖关系非常的复杂,缺少jar包或者多了jar包,甚至jar包的版本不匹配,都会给项目带来严重的问题。
2、以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。
3、Maven就是一款帮助设计者开发项目的工具,能自动的帮助程序员将需要的jar包以及对应依赖包自动的下载下来。极大的提高了开发的效率。
2配置maven环境变量
在这之前配一个maven-home的路径,路径就是maven包的路径,建议放在c盘,用户下
.m2最好。
测试安装成功没有,打开cmd:输入以下命令
2.2在Eclipse中配置Maven工具
3什么是maven仓库
Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。
本地仓库:Maven本地的Jar包仓库。
中央仓库: Maven官方提供的远程仓库。
中央仓库地址:https://mvnrepository.com/
当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。
4maven配置
4.1maven的中央仓库位置
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
在.m2里的setting.xml,文件中找到
<mirrors>
</mirrors>
将内容改成阿里云的maven仓库。
4.2maven修改jdk版本
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
这个也是在.m2里的setting.xmlzhong添加。
找到maven目录下的conf/settings.xml文件,在<profiles></profiles>之间增加以下内容:
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
5认识spring
spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
什么是spring?
概念:spring是一个开源的框架,管理其他的框架,
核心:Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。
5.1什么是springIOC
IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。
IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。
总结:IOC:本质就是将原先由自己管理对象的生命周期,现在交给spring工厂去统一的管理bean的生命周期。
5.2.1认识IOC和DI
IOC— Inversion of Control:
控制反转:就是将对象的生命周期交给spring负责
DI—Dependency Injectio:--将spring创建的对象赋值给类中的空引用。
依赖注入:通过bean中的property给类中的属性赋值。
总结:就是将由spring创建的对象引用赋值到我们自己创建的引用中。
5.2.2spring容器加载的三种方式
在 Spring 框架中,有三种常见的方式用于加载容器:
- XML 配置文件:使用 XML 配置文件是传统和最常见的一种 Spring 容器加载方式。在 XML 配置文件中,你可以定义各种 Bean 的配置信息,包括类路径下的组件扫描、Bean 的定义、Bean 之间的依赖关系等。通过读取和解析 XML 配置文件,Spring 容器可以创建和管理相应的 Bean 实例。
示例 XML 配置文件:
<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">
<!-- 定义Bean -->
<bean id="userService" class="com.example.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.UserDao"/>
</beans>
- Java 配置类:Java 配置类是一种基于代码方式配置 Spring 容器的方式,可以替代 XML 配置文件。通过使用
@Configuration
和@Bean
注解,你可以创建一个 Java 配置类,并在其中定义各种 Bean 的配置信息。Spring 容器会根据 Java 配置类的定义来创建相应的 Bean 实例。
示例 Java 配置类:
@Configuration
public class AppConfig {
@Bean
public UserService userService(UserDao userDao) {
UserService userService = new UserService();
userService.setUserDao(userDao);
return userService;
}
@Bean
public UserDao userDao() {
return new UserDao();
}
}
- 注解扫描:使用注解扫描是一种方便的 Spring 容器加载方式,它会自动扫描指定包及其子包下的所有注解,并将被标注的类注册为 Bean。通过在类上添加
@Component
及其衍生注解(如@Service
、@Repository
、@Controller
等),你可以将类声明为一个组件,并由 Spring 容器进行管理。
示例注解扫描:
@ComponentScan(basePackages = "com.example")
@Configuration
public class AppConfig {
// 所有被@Component注解的类会被自动注册为bean
}
在实际使用中,可以根据具体需求选择以上任意一种方式来加载 Spring 容器。通常,XML 配置文件适用于传统的大型项目;Java 配置类提供了更强的类型安全和编程能力;注解扫描则适用于快速开发和便捷配置。你也可以组合使用多种方式,以满足不同场景的需求。
5.3java配置类怎么使用
要使用 Java 配置类来配置 Spring 容器,你需要按照以下步骤进行操作:
- 创建一个普通的 Java 类,并在类上添加
@Configuration
注解,将其标记为配置类。
@Configuration public class AppConfig { // 配置信息和Bean定义 }
- 在配置类中使用
@Bean
注解来定义需要被容器管理的 Bean
@Bean public UserService userService(UserDao userDao) {
UserService userService = new UserService();
userService.setUserDao(userDao); return userService;
}
@Bean public UserDao userDao() {
return new UserDao();
}
- 可选地,在
@Bean
注解中可以指定 Bean 的名称,如果不指定,默认使用方法名作为 Bean 的名称。
@Bean("myUserService") public UserService userService(UserDao userDao) { // ... }
- 在应用程序的入口处,创建一个
AnnotationConfigApplicationContext
对象,并传入配置类的类对象
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // ... }
- 通过
getBean()
方法从容器中获取所需的 Bean。
UserService userService = context.getBean(UserService.class);
注意事项:
- 确保配置类所在的包路径被扫描到,可以使用
@ComponentScan
注解或手动配置basePackages
参数来指定扫描的包。 - 如果你的项目中同时存在 XML 配置文件和 Java 配置类,可以在创建容器时,同时指定 Java 配置类和 XML 配置文件的路径。
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class, "classpath:applicationContext.xml");
通过以上步骤,你就可以使用 Java 配置类来配置和加载 Spring 容器,并且获取所需的 Bean。Java 配置类提供了更直观和类型安全的方式来定义 Bean,同时也便于进行版本控制和重构。
5.4spring实例化配置文件中bean的三种方式
在 Spring 框架中,实例化配置文件中的 Bean 有三种方式:
- 构造器方式:使用构造器方式创建 Bean 实例时,需要定义 Bean 的属性及其对应值,并将其注入到 Bean 实例中。在 XML 配置文件中,可以使用
<constructor-arg>
元素来完成这一过程。
示例 XML 配置:
<bean id="userController" class="com.example.UserController"> <constructor-arg name="userService" ref="userService"/> </bean>
<bean id="userService" class="com.example.UserService"> <constructor-arg name="userDao" ref="userDao"/> </bean>
<bean id="userDao" class="com.example.UserDao"/>
- 工厂方法方式:使用工厂方法方式创建 Bean 实例时,需要定义一个工厂类和对应的工厂方法,并将工厂类和工厂方法以及参数传递给 Spring 容器。在 XML 配置文件中,可以使用
<bean>
元素的factory-bean
和factory-method
属性来完成这一过程。
示例 XML 配置:
<bean id="userController" class="com.example.UserController"> <property name="userService" ref="userService"/> </bean>
<bean id="userServiceFactory" class="com.example.UserServiceFactory"> <property name="userDao" ref="userDao"/> </bean>
<bean id="userService" factory-bean="userServiceFactory" factory-method="createUserService"/>
<bean id="userDao" class="com.example.UserDao"/>
- 静态工厂方法方式:使用静态工厂方法方式创建 Bean 实例时,需要定义一个工厂类和对应的静态工厂方法,并将工厂类和工厂方法以及参数传递给 Spring 容器。在 XML 配置文件中,可以使用
<bean>
元素的class
属性和factory-method
属性来完成这一过程。
示例 XML 配置:
<bean id="userController" class="com.example.UserController"> <property name="userService" ref="userService"/> </bean>
<bean id="userService" class="com.example.UserServiceFactory" factory-method="createUserService"> <constructor-arg name="userDao" ref="userDao"/> </bean>
<bean id="userDao" class="com.example.UserDao"/>
以上三种方式都可以实现在 Spring 容器中创建并管理 Bean 实例,具体选择哪种方式,取决于你的业务场景和个人偏好。总的来说,构造器方式是最常用的一种方式,可以满足大部分需求;工厂方法方式和静态工厂方法方式则更加灵活,可以更好地支持特殊的创建需求。
5.5bean的作用域:
1. singleton:
<bean id="userInfo" class="cn.lovepi.UserInfo" scope="singleton"></bean>
当Bean的作用域为singleton的时候,Spring容器中只会存在一个共享的Bean实例,所有对Bean的请求只要id与bean的定义相匹配,则只会返回bean的同一实例。单一实例会被存储在单例缓存中,为Spring的缺省作用域。
2. prototype:
<bean id="userInfo" class="cn.lovepi.UserInfo" scope=" prototype "></bean>
每次对该Bean请求的时候,Spring IoC都会创建一个新的作用域。
对于有状态的Bean应该使用prototype,对于无状态的Bean则使用singleton
3. request:
<bean id="userInfo" class="cn.lovepi.UserInfo" scope=" request "></bean>
Request作用域针对的是每次的Http请求,Spring容器会根据相关的Bean的
定义来创建一个全新的Bean实例。而且该Bean只在当前request内是有效的。
4. session:
<bean id="userInfo" class="cn.lovepi.UserInfo" scope=" session "></bean>
针对http session起作用,Spring容器会根据该Bean的定义来创建一个全新的Bean的实例。而且该Bean只在当前http session内是有效的。
5. global session:
<bean id="userInfo" class="cn.lovepi.UserInfo"scope=“globalSession"></bean>
类似标准的http session作用域,不过仅仅在基于portlet的web应用当中才有意义。Portlet规范定义了全局的Session的概念。他被所有构成某个portlet外部应用中的各种不同的portlet所共享。在global session作用域中所定义的bean被限定于全局的portlet session的生命周期范围之内。
5.6spring0-DIbean属性的方式
在 Spring 中,可以使用以下几种方式来进行依赖注入(Dependency Injection)设置 Bean 的属性:
- 构造器注入(Constructor Injection):通过构造方法来注入依赖。在 XML 配置文件中,可以使用
<constructor-arg>
元素来指定构造器参数的值。
示例 XML 配置:
<bean id="userService" class="com.example.UserService"> <constructor-arg ref="userDao"/> </bean>
- Setter 方法注入(Setter Injection):通过 setter 方法来注入依赖。在 XML 配置文件中,可以使用
<property>
元素来设置属性的值。
示例 XML 配置:
<bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao"/> </bean>
- 接口注入(Interface Injection):通过接口方法来注入依赖。这种方式较少使用,一般在特殊情况下才会使用。在 XML 配置文件中,可以使用
<lookup-method>
元素来配置接口方法注入。
示例 XML 配置:
<bean id="userService" class="com.example.UserService"> <lookup-method name="getUserDao" bean="userDao"/> </bean> <bean id="userDao" class="com.example.UserDao"/>
- 注解注入(Annotation Injection):使用注解方式来注入依赖。在类中使用
@Autowired
、@Resource
或@Inject
注解来标记需要注入的属性或构造器。
示例 Java 配置类:
@Configuration public class AppConfig {
@Bean public UserService userService() {
return new UserService();
}
@Bean public UserDao userDao() {
return new UserDao();
}
}
示例注解使用:
@Service public class UserService { @Autowired private UserDao userDao; // ... }
以上是Spring中进行DI(依赖注入)设置Bean属性的几种方式。你可以根据具体的需求选择适合的方式来注入属性并创建 Bean 实例。
5.7spring0-DIbean属性的方式和spring实例化配置文件中bean的三种方式的区别
-
目的:这两个概念解决的问题不同。实例化配置文件中Bean的三种方式主要用于创建和配置Bean实例,包括构造器方式、工厂方法方式和静态工厂方法方式。而DI(依赖注入)设置Bean属性的方式关注的是将依赖注入到Bean中。
-
内容:实例化配置文件中Bean的三种方式是为了创建Bean实例,可以通过构造器或工厂方法来实例化Bean,并将它们组装起来。而DI设置Bean属性的方式是为了将Bean之间的依赖关系注入到Bean中,通常通过setter方法或接口方法来设置属性。
-
配置方式:实例化配置文件中Bean的三种方式使用XML配置文件来定义Bean的创建方式,包括使用
<bean>
元素、constructor-arg
元素和工厂类信息等。而DI设置Bean属性的方式可以使用XML配置文件,也可以使用注解来完成,在XML中使用<property>
元素来设置属性,在注解中使用@Autowired
、@Resource
或@Inject
等注解来标记需要注入的属性。 -
使用场景:实例化配置文件中Bean的三种方式适用于创建和配置Bean的常规场景,可以满足大部分需求。而DI设置Bean属性的方式适用于解决Bean之间的依赖关系,通过注入属性来建立关联,从而实现松耦合和灵活性。
总而言之,实例化配置文件中Bean的三种方式主要关注Bean的创建和配置,而DI设置Bean属性的方式关注的是将依赖注入到Bean中。两者在Spring框架中起到不同的作用,可以根据具体的业务需求选择适用的方式来实现代码逻辑。
6springmvc
6.1servlet的不足支持
servlet是线程不安全的:使用共享变量的时候。
servlet的最大不足支持:线程不安全—当设计者设计出共享的参数。
使用起来不便利:
String id=request.getParameter(“id”);
功能比较单一:
重定向,转发
servlet会造成web.xml文件数据冗余---不好管理。
servlet的机构设计,不利于项目的解耦合。
servlet的使用具有容器依赖性:依赖tomcat服务器。
servlet中的所有方法都必须通过deGet,doPost才能访问。
6.2什么是springMVC?
就是用来替代之前的servlet作用控制层的位置
-- 使用了mvc架构模式思想,将web层进行 职责解耦
-- springMVC就是spring框架中的webmvc spring-webmvc
-- 用来管理用户请求映射
之前的请求:用户通过地址栏发送请求add.do,然后请求会到达web.xml,解析对应的urp-pattern,servle-name
6.3使用springmvc
6.3.1返回ModelAndView类型的参数
@RequestMapping("/test2.do")
public ModelAndView test2(){
ModelAndView mv=new ModelAndView("index");//index是逻辑视图
mv.addObject("username", "txc");
return mv;
}
6.3.2springmvc重新启用了方法括号
@RequestMapping(value="test3.do",method=RequestMethod.GET)
public String test3(String name){
System.out.println("=====test3===="+name);
return "index";
}
这里的括号里的内容就是,在url地址发送请求中后面拼的值
6.3.3springmvc对session和request的支持较好
注意点:在Stuts2中如何使用session和request----ActionContext,ServletActionContext
@RequestMapping(value="test4.do",method=RequestMethod.GET)
public String test4(HttpServletRequest request,HttpSession session){
request.setAttribute("username", "萧十一郎");
session.setAttribute("username1", "小李飞刀李寻欢");
return "index";
6.3.4springmvc中model的使用
@RequestMapping(value="test4.do",method=RequestMethod.GET)
public String test4(HttpServletRequest request,HttpSession session,Model model){
request.setAttribute("username", "萧十一郎");
session.setAttribute("username1", "小李飞刀李寻欢");
return "index";
}
6.3.5springmvc的转发和重定向
程序默认是转发行为
【转发】
@RequestMapping(value="test6.do",method=RequestMethod.GET)
public String test6(){
return "forward:/WEB-INF/views/index.jsp";
}
【重定向】
@RequestMapping(value="test6.do",method=RequestMethod.GET)
public String test6(){
return "redirect:add.do";
}
6.3.6springmvc中modelmap的使用
@RequestMapping(value="test7.do",method=RequestMethod.GET)
public String test7(ModelMap mm){
mm.put("username","路飞");
return "index";
}
6.3.7springmvc对ajax的支持
使用之前需要考入对应的包支持。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.10</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.10</version>
</dependency>
返回json类型的值
被@ResponseBody修饰,返回值会自动的转化成对应的json字符串。
@RequestMapping("/test8")
@ResponseBody
//返回jsonl类型的数据
public Map<String,Object> test8(){
Map<String, Object> map=new HashMap<String, Object>();
map.put("flag", "1");
map.put("stus",new Student("1","2","3","4","5","6"));
return map;
}
好了今天的分享就到这里了。