स्प्रिंग एक शक्तिशाली निर्मित StringUtils वर्ग
सूचना निम्नलिखित सरणी आईडी के
String [] idArray = new String [] {"0", "1", "2", "0", "5", "2"}
का एक सेट से युक्त है और आप डुप्लिकेट संदर्भ निकालना चाहते हैं। बस इसे
idArray = StringUtils.removeDuplicateStrings(idArray);
अब idArray में {"0", "1", "2", "5"} होगा।
और भी बहुत कुछ।
क्या वेब नियंत्रक संदर्भ फ़ाइल में उन्हें घोषित किए बिना नियंत्रक वर्ग का उपयोग करना संभव है?
हाँ, बस अपनी घोषणा में @Component डाल (@Controller की उम्मीद के रूप में काम नहीं करता है)
package br.com.spring.view.controller
@Component
public class PlayerController extends MultiActionController {
private Service service;
@Autowired
public PlayerController(InternalPathMethodNameResolver ipmnr, Service service) {
this.service = service;
setMethodNameResolver(ipmnr);
}
// mapped to /player/add
public ModelAndView add(...) {}
// mapped to /player/remove
public ModelAndView remove(...) {}
// mapped to /player/list
public ModelAndView list(...) {}
}
तो वेब में आवेदन संदर्भ फ़ाइल किसी और निम्नलिखित
<beans ...>
<context:component-scan base-package="br.com.spring.view"/>
<context:annotation-config/>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="order" value="0"/>
<property name="caseSensitive" value="true"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"/>
</beans>
कुछ भी नहीं
डाल
गतिशील रूपों में सत्यापन?
उपयोग निम्नलिखित
public class Team {
private List<Player> playerList;
}
तो टीम सत्यापनकर्ता में
@Component
public class TeamValidator implements Validator {
private PlayerValidator playerValidator;
@Autowired
public TeamValidator(PlayerValidator playerValidator) {
this.playerValidator = playerValidator;
}
public boolean supports(Class clazz) {
return clazz.isAssignableFrom(Team.class);
}
public void validate(Object command, Errors errors) {
Team team = (Team) command;
// do Team validation
int index = 0;
for(Player player: team.getPlayerList()) {
// Notice code just bellow
errors.pushNestedPath("playerList[" + index++ + "]");
ValidationUtils.invokeValidator(playerValidator, player, errors);
errors.popNestedPath();
}
}
}
वेब फ़ॉर्म में विरासत डाल?
उपयोग छिपे स्वरूप झंडा
public class Command {
private Parent parent;
}
public class Child extends Parent { ... }
public class AnotherChild extends Parent { ... }
के साथ और अपने नियंत्रक में ServlerRequestDataBinder निम्न उपाय अपनाते हैं
public class MyController extends MultiActionController {
public ModelAndView action(HttpServletRequest request, HttpServletResponse response, Object command) {
Command command = (Command) command;
// hidden form flag
String parentChildType = ServletRequestUtils.getRequiredStringParameter(request, "parentChildType");
// getApplicationContext().getBean(parentChildType) retrieves a Parent object from a application context file
ServletRequestDataBinder binder =
new ServletRequestDataBinder(getApplicationContext().getBean(parentChildType));
// populates Parent child object
binder.bind(request);
command.setParent((Parent) binder.getTarget());
}
स्प्रिंग एक अंतर्निहित में स्कैनर वर्ग ClassPathScanningCandidateComponentProvider। उदाहरण के लिए, आप एनोटेशन खोजने के लिए इसका इस्तेमाल कर सकते हैं।
ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(<DO_YOU_WANT_TO_USE_DEFAULT_FILTER>);
scanner.addIncludeFilter(new AnnotationTypeFilter(<TYPE_YOUR_ANNOTATION_HERE>.class));
for (BeanDefinition bd : scanner.findCandidateComponents(<TYPE_YOUR_BASE_PACKAGE_HERE>))
System.out.println(bd.getBeanClassName());
स्प्रिंग एक उपयोगी org.springframework.util.FileCopyUtils वर्ग है। आप
public ModelAndView action(...) throws Exception {
Command command = (Command) command;
MultiPartFile uploadedFile = command.getFile();
FileCopyUtils.copy(uploadedFile.getBytes(), new File("destination"));
का उपयोग कर आप एक एनोटेशन आधारित नियंत्रक (स्प्रिंग 2.5+) या सादा MVC स्प्रिंग नियंत्रक का उपयोग करते हैं द्वारा एक अपलोड की गई फ़ाइल कॉपी कर सकते हैं, तो आप वैश्विक संपत्ति संपादकों रजिस्टर करने के लिए एक WebBindingInitializer उपयोग कर सकते हैं।
public class GlobalBindingInitializer implements WebBindingInitializer {
public void initBinder(WebDataBinder binder, WebRequest request) {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy", true);
}
}
की तरह कुछ तो अपने वेब अनुप्रयोग संदर्भ फ़ाइल में, घोषित
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="GlobalBindingInitializer"/>
</property>
</bean>
इस तरह किसी भी टिप्पणी के आधार पर नियंत्रक किसी भी संपत्ति संपादक का उपयोग कर सकते हैं GlobalBindingInitializer में घोषित कर दिया।
और इसी तरह ... के बाद से ApplicationContext
भी एक ApplicationEventPublisher
संदर्भ स्प्रिंग कार्यान्वयन है
उपयोगी सामान, यह। कोड जो काम करता है वह 'SimpleAplicationEventMulticaster' है, जो वैकल्पिक रूप से घटनाओं को असीमित रूप से वितरित करने के लिए थ्रेड पूल का उपयोग कर सकता है। मैं इसे करने के लिए कोड लिखने के लिए ऊब गया हूं। – skaffman