- 浏览: 72711 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
zsw12013:
怎么不把你的数据库的数据也发过来????
ajax联动菜单 -
闫昌盛:
你写的什么啊? 不对啊
错误信息 :
DEBUG: setD ...
Java邮件实例01 -
luo877280:
登录和注册(jsp+servlet+JavaBean)
一:注释的方法注入
1.XML配置文件的改动:
2.依赖包的导入: aopalliance.jar asm-2.2.3.jar asm-commons-2.2.3.jar asm-util-2.2.3.jar aspectjlib.jar aspectjrt.jar aspectjweaver.jar cglib-nodep-2.1_3.jar commons-attributes-api.jar commons-attributes-compiler.jar commons-logging.jar log4j-1.2.15.jar persistence.jar spring-agent.jar spring-aop.jar spring-aspects.jar spring-beans.jar spring-context.jar spring-core.jar spring-jdbc.jar spring-jms.jar spring-orm.jar spring-tomcat-weaver.jar spring-tx.jar 二:@Autowired或 @Resource注释方式进行装配 @Autowired是默认按类型装配。 @Resource是默认按名称装配,找不到与名称匹配的bean时,再按类型装配。 (1).@Resource: JDK提供,移植性强,推荐使用, 可以看到支撑类是: import javax.annotation.Resource; 只要是JDK1.5以上版本,JDK内置了此注释支撑类. (2).用法: 用在属性上 示例: //dao层接口: //dao层实现类 //service层接口 //service层实现类 //配置文件(chapter5.xml) 注意:我们只在xml中配置了两个bean对象,它们之间并没有关系,但是在Java中我们采用注释语法,这个时候@Resource注释语法会根据属性名称在spring容器中去寻找和属性名称同名id的bean对象,然后将其注入到属性中。 //测试类 (3).更改配置文件 将<bean id="fruitDao" class="com.spring.chapter5.dao.impl.FruitDaoImpl" />改为<bean id="myFruitDao" class="com.spring.chapter5.dao.impl.FruitDaoImpl" /> 这个时候可以看到myFruitDao和属性名称并没有对应,但执行Test文件后,可以看到执行成功。这因为如果名称上没有对应,就会按类型自动对性,所以会执行成功。 (4).我们还可以给@Resource加上name,请看下面的语法 //service层实现类 再次执行Test,同样可以执行成功. (5).用上属性的set方法上 //service层实现类 可以看到,用在属性上,或者用上属性的set方法上,效果是一模一样的,没有任何区别. 三:@Autowired //service层实现类 运行Test文件,可以看到效果一样 同样,我们也可以把@Autowired改成按名称装配 //service层实现类 这里需要注意的是: @Autowired() @Autowired的required属性 @Autowired(required=true) 四:通过在classpath自动扫描方式把组件纳入到spring容器中管理. Spring2.5引入了组件自动扫描机制,他可以在类路径下寻找标注了@Component, @Service, @Controller, @Repository注解的类, 并把这些类纳入进Spring容器中管理,它的作用,和在XML文件中使用Bean节点配置组件是一样的,要使用自动扫描机制。
<context:component-scan base-package="com.spring.chapter5" />这一项配置了需要扫描的包,包含子包. @Service: 用于标注业务层的类 通过扫描机制, 基本上可以达到配置文件基本为空的效果, 这是Spring2.5新推出的功能, 老系统不能运用, 但是新系统中, 此功能运用的非常多。 示例: //dao层实现类 //service层实现类 这个时候,我将Dao层,服务层的两个实现类交给Spring管理了,相当于以前配置了两个Bean,这个时候我们可以验证一下,我们是否可以从容器中获取对象。 //xml配置 //测试类 这里需要注意的是,当对象交给Spring管理后,Spring给对象起的ID名称是类的简单名称, 即类全名,但是首字母小写。 自定义名称: //dao层实现类 //service层实现类 //测试类 五:改变对象的范围(单例或非单例) @Repository("fruitDao") 六:对象初始化方法和销毁方法的配置 如果对象是非单例模式,这个时候可以看到init方法会调用两次,而destroy方法不会调用. 将Dao层注入到服务层: <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
</beans>
package com.spring.chapter5.dao;
public interface FruitDao {
public void create();
}
package com.spring.chapter5.dao.impl;
import com.spring.chapter5.dao.FruitDao;
public class FruitDaoImpl implements FruitDao {
public void create() {
System.out.println("Dao层方法create被调用");
}
}
package com.spring.chapter5.service;
public interface FruitService {
public void create();
}
package com.spring.chapter5.service.impl;
import javax.annotation.Resource;
import com.spring.chapter5.dao.FruitDao;
import com.spring.chapter5.service.FruitService;
public class FruitServiceImpl implements FruitService {
@Resource
private FruitDao fruitDao;
public void create() {
fruitDao.create();
}
public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<bean id="fruitDao" class="com.spring.chapter5.dao.impl.FruitDaoImpl" />
<bean id="fruitService" class="com.spring.chapter5.service.impl.FruitServiceImpl" />
</beans>
package com.spring.chapter5.service.impl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.chapter5.service.FruitService;
public class Test {
public static void main(String[] args) {
ApplicationContext act = new ClassPathXmlApplicationContext("chapter5.xml");
FruitService fruitService = (FruitService) act.getBean("fruitService");
fruitService.create();
}
}
public class FruitServiceImpl implements FruitService {
@Resource(name="myFruitDao")
private FruitDao fruitDao;
public void create() {
fruitDao.create();
}
public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}
public class FruitServiceImpl implements FruitService {
private FruitDao fruitDao;
public void create() {
fruitDao.create();
}
@Resource(name="myFruitDao")
public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}
public class FruitServiceImpl implements FruitService {
private FruitDao fruitDao;
public void create() {
fruitDao.create();
}
@Autowired
public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}
public class FruitServiceImpl implements FruitService {
@Autowired()
@Qualifier("myFruitDao")
private FruitDao fruitDao;
public void create() {
fruitDao.create();
}
public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}
@Qualifier("myaFruitDao")
private FruitDao fruitDao;
这两句只能用在属性上,不能用上方法上.
@Qualifier("myFruitDao")
required=true : 必须为属性注入值,
required=false: 不是必须注入值,如果找不到对应的值注入,会注入null<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.spring.chapter5" />
</beans>
@Controller: 用于标注控制层,如Action
@Repository: 用于标注Dao层
@Component: 用于标注组件层, 当组件不好归类的时候,可以用此标注package com.spring.chapter5.dao.impl;
import org.springframework.stereotype.Repository;
import com.spring.chapter5.dao.FruitDao;
@Repository
public class FruitDaoImpl implements FruitDao{
public void create() {
System.out.println("Dao层方法create被调用");
}
}
package com.spring.chapter5.service.impl;
import org.springframework.stereotype.Service;
import com.spring.chapter5.dao.FruitDao;
import com.spring.chapter5.service.FruitService;
@Service
public class FruitServiceImpl implements FruitService {
private FruitDao fruitDao;
public void create() {
fruitDao.create();
}
public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.spring.chapter5" />
</beans>
package com.spring.chapter5.service.impl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.chapter5.dao.FruitDao;
import com.spring.chapter5.service.FruitService;
public class Test {
public static void main(String[] args) {
ApplicationContext acx = new ClassPathXmlApplicationContext(
"chapter5.xml");
FruitDao fruitDao = (FruitDao) acx.getBean("fruitDaoImpl");
FruitService fruitService = (FruitService) acx
.getBean("fruitServiceImpl");
System.out.println(fruitDao);
System.out.println(fruitService);
}
}
package com.spring.chapter5.dao.impl;
import org.springframework.stereotype.Repository;
import com.spring.chapter5.dao.FruitDao;
@Repository("fruitDao")
public class FruitDaoImpl implements FruitDao {
public void create() {
System.out.println("Dao层方法create被调用");
}
}
package com.spring.chapter5.service.impl;
import org.springframework.stereotype.Service;
import com.spring.chapter5.dao.FruitDao;
import com.spring.chapter5.service.FruitService;
@Service("fruitService")
public class FruitServiceImpl implements FruitService {
private FruitDao fruitDao;
public void create() {
fruitDao.create();
}
public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}
package com.spring.chapter5.service.impl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.chapter5.dao.FruitDao;
import com.spring.chapter5.service.FruitService;
public class Test {
public static void main(String[] args) {
ApplicationContext acx = new ClassPathXmlApplicationContext(
"chapter2.xml");
FruitDao fruitDao = (FruitDao)acx.getBean("fruitDao");
FruitService fruitService = (FruitService) acx.getBean("fruitService");
System.out.println(fruitDao);
System.out.println(fruitService);
}
}
@Scope("prototype")
加上@Scope("prototype")此注释即可,这个时候每次获取对象都会是一个新对象@Repository("fruitDao")
@Scope("prototype")
public class FruitDaoImpl implements FruitDao {
public void create() {
System.out.println("Dao层方法create被调用");
}
@PostConstruct
public void init(){
System.out.println("调用init");
}
@PreDestroy
public void destory(){
System.out.println("调用destory");
}
}
@Service("fruitService")
public class FruitServiceImpl implements FruitService {
@Resource(name="fruitDao")
private FruitDao fruitDao;
public void create() {
fruitDao.create();
}
public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}
- aopalliance.jar (4.4 KB)
- 下载次数: 2
- asm-2.2.3.jar (34 KB)
- 下载次数: 1
- asm-commons-2.2.3.jar (14.8 KB)
- 下载次数: 1
- asm-util-2.2.3.jar (34.2 KB)
- 下载次数: 1
- aspectjlib.jar (7.7 KB)
- 下载次数: 6
- aspectjrt.jar (112.2 KB)
- 下载次数: 1
- aspectjweaver.jar (1.5 MB)
- 下载次数: 1
- cglib-nodep-2.1_3.jar (316.6 KB)
- 下载次数: 1
- commons-attributes-compiler.jar (28.5 KB)
- 下载次数: 7
- commons-attributes-api.jar (35.5 KB)
- 下载次数: 2
- commons-logging.jar (59.4 KB)
- 下载次数: 1
- log4j-1.2.15.jar (382.7 KB)
- 下载次数: 1
- persistence.jar (69.3 KB)
- 下载次数: 2
- spring-agent.jar (5.4 KB)
- 下载次数: 1
- spring-aop.jar (318.3 KB)
- 下载次数: 1
- spring-aspects.jar (19.9 KB)
- 下载次数: 3
- spring-beans.jar (476.8 KB)
- 下载次数: 3
- spring-context.jar (465.8 KB)
- 下载次数: 3
- spring-core.jar (278.8 KB)
- 下载次数: 2
- spring-jdbc.jar (327.6 KB)
- 下载次数: 3
- spring-jms.jar (190.8 KB)
- 下载次数: 1
- spring-orm.jar (369 KB)
- 下载次数: 3
- spring-tomcat-weaver.jar (8.7 KB)
- 下载次数: 3
- spring-tx.jar (225.8 KB)
- 下载次数: 3
发表评论
-
第六章 JDK代理模式
2010-05-05 11:35 861一:Spring中的AOP技术实际上就是Struts2中的拦截 ... -
第四章 构造器注入,自动装配,集合注入
2010-05-02 14:52 1026一:控制反转(IOC):就是实例化对象的控制权发生了转变,以前 ... -
Set注入
2010-05-01 16:17 1085一:Dao层 package com.spring.ch ... -
第二章 创建bean及bean的范围
2010-05-01 14:46 939一:实例化bean 构造方法实例化 pack ... -
第一章 spring简介
2010-04-30 19:50 880一:对象的创建 了解spring得须了解一下对象的工 ...
相关推荐
第5章 SQL盲注利用 171 5.1 概述 172 5.2 寻找并确认SQL盲注 173 5.2.1 强制产生通用错误 173 5.2.2 注入带副作用的查询 173 5.2.3 拆分与平衡 173 5.2.4 常见的SQL盲注场景 175 5.2.5 SQL盲注技术 176 5.3 使用基于...
2. 注释注入:在输入中插入注释符号,使部分SQL语句无效,改变原有查询逻辑。 3. Error-Based注入:通过引发错误信息来获取数据库结构或数据。 4. Time-Based注入:通过延迟查询执行时间来判断数据库结构。 防御...
第5章 SQL盲注利用 5.1 概述 5.2 寻找并确认SQL盲注 5.2.1 强制产生通用错误 5.2.2 注入带副作用的查询 5.2.3 拆分与平衡 5.2.4 常见的SQL盲注场景 5.2.5 SQL盲注技术 5.3 使用基于时间的...
如果网站正常显示第一个URL,第二个和第三个URL显示出不同结果,则可能存在SQL注入漏洞。 ##### **2. 错误消息分析** 如果Web应用程序返回详细的错误信息,攻击者可以通过这些信息来确定数据库类型以及可能存在的...
Out-of-band注入是指攻击者利用数据库特性,使数据库服务器与第三方通信,从而获取数据。这种方式通常用于无法直接获取响应的情况。 **3. Blind注入** Blind注入也称为基于布尔的SQL注入,攻击者通过观察服务器...
攻击者可以使用内联注释来绕过WAF,例如:select * from articles where id = id使用内联注释注入:select * from articles where id = -1 /*!union*/ /*!select*/ 1,2,3,4。 Mysql注入是非常危险的攻击方式,攻击...
- `http://192.168.1.3/admin/?do=editurrency&cid=1+order+by+5+--+`:测试第五列是否存在。 - `http://192.168.1.3/admin/?do=editurrency&cid=1+order+by+6+--+`:测试第六列是否存在。 - **解释**:通过不断...
5. **服务器端验证**:尽管客户端验证可以提供第一层保护,但服务器端验证是必不可少的,因为它可以防止绕过客户端验证的攻击。通过服务器端验证,确保输入数据符合预期的格式和范围。 6. **转义特殊字符**:对特殊...
包中的第5个文件夹。 最后的最后,再介绍一个未公开函数InitializeLpkHooks,这个函数在网上能找到的资料更 少,只有一个声明而已。但是它名称中最后那个“Hooks”误导了我,我以为又是一个可以 用来注入DLL的...
5. **使用ORM框架**:现代的ORM框架通常内置了安全机制来防止SQL注入。 6. **定期审计**:定期进行代码审计,检查潜在的安全漏洞。 通过以上介绍,我们可以了解到SQL注入过滤字典中包含了各种特殊字符和关键词,...
而第二个请求(`id=49 and 1=2`)中的`1=2`始终为假,如果返回结果为空,则表明存在SQL注入漏洞的可能性较大。 3. **示例分析**:假设一个站点的URL为`http://www.example.com/showdetail.asp?id=49`,其中`id`参数...
在注入点输入"/*",如果页面返回正常,这可能意味着数据库是MySQL,因为MySQL支持这种注释方式。接着,我们需要确定MySQL的版本。通过使用`and ord(mid(version(),1,1))>51/*`,如果页面返回正常,这意味着数据库...
5. Mysql中会自动识别URL与Hex编码好的内容。 去除空格的代码分析 在Web应用中,开发者经常使用preg_replace函数来过滤用户输入的数据,例如去除空格。但是,这种做法并不能完全防止SQL注入攻击。Preg_replace函数...
例如,在Access数据库中,可以利用`and`、`or`等逻辑运算符,以及单引号、注释符等特殊字符来构造有效的SQL注入语句,实现对数据库的非法访问或操作。 #### 7. 实战演练 实战演练是检验和提升手工注入技能的最佳...