向spring申请一个User对象:

ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
User bean = (User)ac.getBean("user");//根据id获取User对象,每次获取的对象都是同一个

那么如何给配置在xml文件里对象赋值?可以使用依赖注入(就是在xml文件里事先配置好属性地值):

<bean name="user" class="com.echo.bean.User">
    <property name="u_id" value="5"></property>
</bean>
Spring-Ioc | DI 概念:(要实现IOC依赖DI的支持 )
IoC:反转控制
反转:将我们自己创建对象的工作交给Spring容器帮我们完成
控制:就是有Spring帮我们负责创建销毁对象,掌控对象的生命周期,我们在需要使用对象的时候跟Spring申请即可
IOC是一种编程思想,也是一种新的设计模式,它将帮助我们管理对象,它需要DI(依赖注入)技术的支持,维护依赖关系

DI:依赖注入
将值通过配置的方式为变量初始化 / 赋值(注入)

bean标签属性:
lazy-init(懒加载):
在ClassPathXmlApplicationContext对象创建时,容器中的所有对象都会被自动创建
如果配置大量的bean,会导致内存过大
Spring推出了延迟加载解决这一问题(懒加载):

<!---->
<!--就是直到要使用时才加载-->
    <bean name="user" class="com.echo.bean.User" lazy-init="true">
        <property name="u_id" value="5"></property>
    </bean>

scope:
singleton(常用):单例模式(默认)
prototype(特殊时使用):多例模式(每次申请都新构造一个新的对象,如果使用该属性值,创建的对象就会交给程序员管理,不再由Spring管理)
request(不常用):在web环境下,如果scope属性为request,那么这个对象被创造出来时。它的生命周期会与request一致
session(不常用):同理,生命周期与session一致

初始化方法Init-method和销毁方法destroy-method
Init-method:如果对象需要在创建后调用一些初始化方法(非构造器),可以使用这个属性设置
destroy-method:如果对象在销毁前需要调用一些方法(例如释放资源),可以使用这个属性设置,该方法在容器关闭后激活(单例模式有效)

Spring属性注入:(在xml中配置属性)
Setter方法注入:如果要注入属性,则类中必须要有属性对应的Setter方法
引用类型(自定义类型):如果对象中包含另一个对象的引用(自定义类型),则需要再同级标签下再配置一个该类型的bean,然后在主对象中使用ref关联起来:

<bean name="user" class="com.echo.bean.User">
    <property name="u_id" value="5"></property>
    <property name="u_username" value="echo"></property>
    <property name="pet" ref="pet"></property>
</bean>
    
<bean name="pet" class="com.echo.bean.Pet">
    <property name="name" value="mypet"></property>
</bean>

构造方法注入:利用带参构造器注入
无参构造器是必须提供的,spring用无参构造器创建对象
构造方法注入只是将属性注入

<!--要把构造器所有的参数都配置上-->
<bean name="userplus" class="com.echo.bean.User">
    <constructor-arg name="u_username" value="abc" type="java.lang.String"></constructor-arg>
    <constructor-arg name="u_password" value="abc" type="java.lang.String"></constructor-arg>
</bean>

复杂类型注入(Array、List、Set、Map、Properties):
示例:被注入的java类:

public class Col {
//以下getter、setter省略
    private Object[] array;
    private ArrayList list;
    private Map map;
    private Properties properties;
    private Set set;

</property>

<property name="map">
            <map>
                <!--map内容使用entry包围,在其中设置key和value-->
                <entry key="A" value="a"></entry>
                <entry key="B" value="b"></entry>
                <!--同样可以设置引用类型的key和value-->
                <entry key-ref="user" value-ref="pet"></entry>
            </map>
        </property>

<property name="properties">
            <props>
                <!--prop的value直接写在标签里-->
                <prop key="name">root</prop>
                <prop key="password">123456789</prop>
            </props>
        </property>
    </bean>

Spring注解配置:
可以使用注解配置将对象交给Spring管理,首先要打开基本扫描:

<!-- 开启组件扫描 base-package扫描该包下以及子包的所有注解-->
<context:component-scan base-package="com.echo.bean"></context:component-scan>

打开这个Spring就会自动扫描包下的所有注解
Spring注解:
@Component():
在类定义的顶上加入该注解,则会将该类的实例交给Spring管理,例如:

@Component("user2")
public class User2 {
...
}

Spring为了区分对象在不同层的注解使用了以下注释:

//功能和@Component("user2")一样,只是名称不同,有利于区分
@Controller("user2") //对应web层
@Service("user2")    //对应service层
@Repository("user2")    //对应Dao层

@Scope:
使用方式:
将值赋值给scopeName,也可以省略scopeName

@Scope(scopeName = "prototype")
public class User2 {
...

@PostConstruct:
在构造器调用后调用

@PreDestroy:
在对象销毁前调用

Spring注解注入:
@Value():
注入基本数据,可以给成员变量注解,也可以给方法注解,如果成员变量私有,推荐在setter方法上使用该注解。

@Resource和@Autowired:
以上两种注解用来输入引用数据,作用是可以消除代码中的setter和getter,还有bean中的properties属性
@Autowired:
自动装配,如果设置该注解,Spring会自动在管理的类中按照查找同类型的实例,并填装上,如果找到多个或没有找到,就报错。

@Resource:
功能同上,需要设置name,用来指定填装的实例,而不是自动查找,比Autowired推荐使用。

Spring集成的JUnit测试:
@RunWith(SpringJUnit4ClassRunner.class)//使用junit进行测试,帮我们创建容器
@ContextConfiguration("classpath:ApplicationContext.xml")
public class SpringJunit {

//可以直接从容器中获取对象
    @Resource(name = "user")
    private User user;
    
    @Test
    public void test() {
        System.out.println(user);
    }

Spring分包配置:
如果有多个配置文件
可以通过import将某个配置文件添加到其他配置文件中

<!--导入其他配置文件-->
<import resource="ApplicationContext.xml"/>
1
2
配置Spring随项目启动:
在web.xml中加入监听器配置:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:ApplicationContext.xml</param-value>
</context-param>

然后可以在java中调用容器:

WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
1
Spring-aop中的一些名词:

新加坡和马来西亚将发热监测标准定为高于37.5℃

出一个简单的Spring框架入门教程相关推荐

  1. Java Spring框架入门详解教程【多测师_何sir】

    Spring框架入门详解教程 spring概述 spring结构 spring IOC spring DI spring概述 Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多 ...

  2. Tornado框架入门教程

    Tornado框架入门教程 Tornado在知乎广为使用,当你用Chrome打开网页版本的知乎,使用开发者工具仔细观察Network里面的请求,就会发现有一个特别的状态码为101的请求,它是用浏览器的 ...

  3. c++框架有哪些_Java Mybatis框架入门教程_v20200726

    MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...

  4. Egg框架入门教程合集之插件/工具/教程/专栏/开源项目

    Egg框架入门教程之示例合集 Awesome Egg.js 很棒的清单,精选了最好的Egg.js插件,工具,教程,文章等.欢迎公关! 内容 博客 文章 讲解 会议活动 外挂程式 应用领域 样板 构架 ...

  5. Spring Cloud入门教程(二):客户端负载均衡(Ribbon)

    对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...

  6. 手写代码,简单实现Spring框架

    Java核心编程高阶实战案例:MySpring 本博文通过学习 中国大学MOOC 平台上陈良育老师讲的 Java核心技术(高阶) 课程,因为老师视频中的讲解有些较为简略,于是我自己另外搜集资料,从老师 ...

  7. Spring Boot入门教程(四十一):微信支付集成-扫码支付

    分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业 ...

  8. 网络爬虫笔记 :一个简单的爬虫框架

    学了两节课的 Python 爬虫,也算是入门了吧.敲了两天的案例代码之后,我突然发现,这些代码虽然功能不同,写法各异,但是终归是有章可循的,整体框架是一致的.所以我自己整理了一个简单的爬虫框架,适合初 ...

  9. 搭建一个简单springboot后端框架

    前言 框架知识是每个程序员都应该或多或少都要有所了解,作为后端开发更是以后进阶架构师必备的知识储备:以此为出发点,我们可以从搭建一个简单的后端框架开始,了解相关的技术点和搭建思路. 我们可以从创建项目 ...

最新文章

  1. AndroidStudio 3.0升级之compile、implementation简要说明
  2. java课程设计日历记事本代码,已开源
  3. Spring(四)Bean注入方试
  4. Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化
  5. android 获取webView高度,设置webView高度
  6. mysql innodb monitor_MySQL innodb_table_monitor 解析
  7. 恢复计算机硬盘数据,计算机数据恢复,小编教您如何恢复计算机数据
  8. 话说网页长啥样,到底谁说了算??
  9. vue js代码混淆加密、压缩
  10. ue4联网和多人游戏总结(第二部分)
  11. 快播资源哪里跑(逆向)
  12. 二维空间:点到直线距离的计算
  13. 还在为表情包而发愁吗?今天教你用 Python 画一个奸笑(滑稽)表情(内附源码)
  14. Calendar根据输入的年份和周数计算该周的开始日期和结束日期
  15. win 10网络适配器没有无线网络连接(连不上WLAN)
  16. openGL结合光照与纹理
  17. 全平台系统提权辅助工具 PEASS-ng
  18. db9接口(db9接口详细接线图)
  19. 无线授时服务器接LED屏,实现ipad远程无线控制led大屏幕分以下几个步骤!
  20. 计算机班主任总结范文,中等*学校计算机班主任年度的工作总结

热门文章

  1. 家用电器用户行为分析与事件识别_用户行为分析埋点实时数仓实践
  2. 用python写生日祝福的教程_祝豌豆生日快乐 - Python猫的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. 六、DNS组成与原理
  4. vs界面竖线光标变成灰色方块,输入时替代已有字符
  5. 组队练习赛(Regionals 2012, North America - East Central NA)
  6. 发布国内首个无服务器容器服务,运维效率从未如此高效
  7. 译-在Python正则模式中search()和match()的区别是什么?
  8. Android平台调用WebService详解
  9. 初学者应该了解的编程陷阱:javascript篇
  10. [zz] 深入java虚拟机之本地方法